层次结构数据模板:仅限一级子级
本文关键字:一级 数据 层次结构 | 更新日期: 2023-09-27 17:58:11
我有一个项目的树视图,它目前显示了所有级别的子项,直到最远。我怎样才能做到只展示孩子的第一层次?HierarchicalDataTemplate
可能是错误的方法吗?仅仅让2级的孩子崩溃是不够的。
使用数据源的过滤版本,这样只包括您想要的级别,然后您就可以毫无问题地使用层次结构数据模板了。
只需使用DataTemplate
,而不是HierarchicalDataTemplate
。
编辑:明白了。有很多选择。上面汤米的推荐很好,很优雅。另一个选项是覆盖TreeViewItem的ControlTemplate,用于不想看到其子项的任何项,并隐藏扩展区域。
好吧,如果不操作数据,就不可能只显示一个级别的子级。控件需要一个属性,该属性能够确定所显示节点的深度。
我想到了这个解决方案,它非常明显:我只使用了两个平面树视图,第二个视图依赖于第一个视图的SelectedItem
。根本不需要HierarchicalDataTemplate
。只是一个普通的DataTemplate
。
据我所知,您需要顶级节点,以及其中的1级子节点,并且不再需要(因此总共将有2级节点)。然后,如果你想在XAML中使用两个模板:
<Grid>
<Grid.Resources>
<DataTemplate x:Key="TemplateLeaf">
<TextBlock Text="{Binding Text}" /> <!-- Whatever leaf view you want -->
</DataTemplate>
<sdk:HierarchicalDataTemplate ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateLeaf}" x:Key="TemplateNode">
<TextBlock Text="{Binding Text}" />
</sdk:HierarchicalDataTemplate>
</Grid.Resources>
<sdk:TreeView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateNode}" />
</Grid>
(这是Silverlight版本,但它是一样的)。默认情况下,HierarchicalDataTemplate
将自己用作自己的ItemTemplate
,但如果需要,您可以将其替换为下一级别的其他模板(包括普通DataTemplate
)。