Caliburn.Micro TreeView добавить элемент stati c - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть работающий 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; } 
}

1 Ответ

1 голос
/ 21 апреля 2020

Вставьте 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>
...