У меня есть рабочий TreeView

                        <TreeView x:Name="TVAccess" ItemsSource="{Binding AccessLevel}" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3">
                        <TreeView.ItemTemplate>
                            <HierarchicalDataTemplate  >
                                <StackPanel Orientation="Horizontal">
                                    <!--<CheckBox Checked="{Binding Checked}"/>-->
                                    <TextBlock Text="{Binding Text}" />
                                </StackPanel>
                            </HierarchicalDataTemplate>
                        </TreeView.ItemTemplate>
                    </TreeView>

Он привязан к объекту AccessLevel, определенному следующим образом

public BindableCollection<UserLibrary.DataAccess.TextHelper.TreeViewItem> AccessLevel { get; set; }

Это хорошо работает В результате

enter image description here

Я хотел бы добавить фиксированный первый уровень под названием «Право доступа», как я могу это сделать?

РЕДАКТИРОВАТЬ 1

Структура, которую я хотел бы, такая:

enter image description here

Спасибо за помощь.

Изменить 2 - Класс TreeViewItem

public class TreeViewItem
{
    public string Text { get;  set; }
    public bool Checked { get;  set; }
}

Изменить 3 - изменить класс TreeViewItem

Итак, если я изменю свой вызов таким образом, теперь проблема состоит в том, чтобы привязать его к TreeView

    public class TreeViewItem
{
    public string Text { get;  set; }
    public bool Checked { get; set; }

    public IEnumerable<TreeViewItem> SubTreeViewItem { get; set; } 
}
0
Stéphan F 21 Апр 2020 в 09:57

1 ответ

Лучший ответ

Вставьте TreeViewItem в исходную коллекцию по индексу 0.

AccessLevel.Insert(0, new UserLibrary.DataAccess.TextHelper.TreeViewItem() { Text = "Access Right" } );

Или установите для свойства ItemsSource значение CompositeCollection и определите фиксированный элемент в разметке XAML:

<TreeView x:Name="TVAccess" Grid.Row="1" Grid.Column="0" 
                  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3">
    <TreeView.Resources>
        <CollectionViewSource x:Key="source" Source="{Binding AccessLevel}" />
    </TreeView.Resources>
    <TreeView.ItemsSource>
        <CompositeCollection>
            <local:TreeViewItem Text="Access Right" />
            <CollectionContainer Collection="{Binding Source={StaticResource source}}" />
        </CompositeCollection>
    </TreeView.ItemsSource>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate  >
            <StackPanel Orientation="Horizontal">
                <!--<CheckBox Checked="{Binding Checked}"/>-->
                <TextBlock Text="{Binding Text}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
1
mm8 21 Апр 2020 в 11:24