具有多个级别但对象类型相同的 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
。
其次,您需要设置 HierarchicalDataTemplate
的 ItemsSource
以显示对象层次结构。
此外,为什么要绑定 CheckBox
的 Tag
属性 而不是使用 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>
我正在尝试创建一个 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
。
其次,您需要设置 HierarchicalDataTemplate
的 ItemsSource
以显示对象层次结构。
此外,为什么要绑定 CheckBox
的 Tag
属性 而不是使用 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>