具有多个级别但对象类型相同的 TreeView

TreeView with multiple levels but same object type

我正在尝试创建一个 TreeView 具有多个级别但只有一种类型 (IPermission)

像这样:

--[X] Permission1
----[X] Permission1_1
------[] Permission1_1_1
----[] Permission1_2
----[] Permission1_3
--[X]Permission2

并且可以选择带有 CheckBox 的每个级别。

这是我的对象:

public interface IPermission
{
    int ParentID { get; set; }
    int ID { get; set; }
    string Title { get; set; }
    bool Value { get; set; }
    List<IPermission> Children { get; set; }
}

我使用 HierarchicalDataTemplate / DataTemplate / CompositeCollection 但没有找到解决方案。

这是我所做的一个例子:

            <TreeView>
                <TreeViewItem Header="Nom" ItemsSource="{Binding Permissions}">
                    <TreeViewItem.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding}">
                            <StackPanel Orientation="Horizontal">
                                <CheckBox Margin="2" Tag="{Binding Path=Value}" />
                                <TextBlock Text="{Binding Path=Title}" FontWeight="SemiBold" />
                            </StackPanel>
                        </HierarchicalDataTemplate>
                        <!-- How to display the Children ? -->
                    </TreeViewItem.ItemTemplate>
                </TreeViewItem>
            </TreeView>

您的 XAML 标记不正确。

您需要在 TreeView 中定义 ItemTemplate,而不是 TreeViewitem

其次,您需要设置 HierarchicalDataTemplateItemsSource 以显示对象层次结构。

此外,为什么要绑定 CheckBoxTag 属性 而不是使用 IsChecked 属性?

<TreeView ItemsSource="{Binding Permissions}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <CheckBox Margin="2" IsChecked="{Binding Value}" />
                <TextBlock Text="{Binding Title}" FontWeight="SemiBold" />
            </StackPanel>
        </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate>
</TreeView>