我需要在WPF中创建一个看起来像这样的TreeView:
我有一个群组列表,每个群组都有3个属性:
只显示用户或权限很简单:
<TreeView ItemsSource="{Binding Groups}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Users}">
<TextBlock Text="{Binding GroupName}" />
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding UserName}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
但我需要添加2个节点(用户和权限),这些节点会展开以显示2个列表。
任何建议都非常感谢......
答案 0 :(得分:3)
您可以使用带转换器的MultiBinding来执行以下操作:
<HierarchicalDataTemplate DataType="{x:Type local:GroupClass}">
<HierarchicalDataTemplate.ItemsSource>
<MultiBinding Converter="{StaticResource converter-that-returns-lists-as-is}">
<Binding Path="Users"/>
<Binding Path="Permissions"/>
</MultiBinding>
</HierarchicalDataTemplate.ItemsSource>
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="IEnumerable[UserClass]" ItemsSource="{Binding Path=.}">
<TextBlock Text="Users"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:UserClass}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
<HierarchicalDataTemplate x:Key="IEnumerable[PermissionClass]" ItemsSource="{Binding Path=.}">
<TextBlock Text="Permissions"/>
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:PermissionClass}">
<TextBlock Text="{Binding Path=Name}"/>
</DataTemplate>
转换器只会将未经修改的列表归还为IEnumerable<T>
。