具有多个级别但对象类型相同的 TreeView [英] TreeView with multiple levels but same object type
问题描述
我正在尝试创建一个具有多个级别但只有一种类型 (IPermission
) 的 TreeView
I'm trying to create a TreeView
with multiples levels but only one type (IPermission
)
像这样:
--[X] Permission1
----[X] Permission1_1
------[] Permission1_1_1
----[] Permission1_2
----[] Permission1_3
--[X]Permission2
例如可以使用 CheckBox
选择每个级别.
And with a possibility of selecting each level with a CheckBox
for example.
这是我的对象:
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
但没有找到解决方案.
I worked with HierarchicalDataTemplate
/ DataTemplate
/ CompositeCollection
but did not find a solution.
这是我所做的一个例子:
Here is an example of what I've done :
<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 标记不正确.
Your XAML markup is incorrect.
您需要在 TreeView
中定义一个 ItemTemplate
,而不是在 TreeViewitem
中.
You need to define an ItemTemplate
in the TreeView
, not in the TreeViewitem
.
其次,您需要设置HierarchicalDataTemplate
的ItemsSource
以显示对象层次结构.
Secondly, you need to set the ItemsSource
of the HierarchicalDataTemplate
in order to display the objects hierarchy.
此外,为什么要绑定 CheckBox
的 Tag
属性而不是使用 IsChecked
属性?
Furthermore, why are you binding the Tag
property of the CheckBox
instead of using the IsChecked
property?
<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>
这篇关于具有多个级别但对象类型相同的 TreeView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!