我有一个项目的树视图,它目前显示所有级别的孩子,一直到最远。我怎样才能做到只显示第一级的孩子?HierarchicalDataTemplate
也许是错误的方法?折叠 2 级及更多的子级是不够的。
4 回答
如何使用数据源的过滤版本,以便只包含您想要的级别,然后您可以毫无问题地使用 HierarchialDataTemplate。
只需使用DataTemplate
, 而不是HierarchicalDataTemplate
.
编辑:明白了。有很多选择。上面汤米的推荐是一个很好的和优雅的。另一种选择是为您不想看到其子项的任何项目覆盖 TreeViewItem 的 ControlTemplate 并隐藏扩展器区域。
好吧,如果不操纵数据,就不可能只显示一个级别的孩子。该控件需要一个属性,该属性能够确定显示节点的深度。
这个解决方案来找我并且非常明显:我只使用两个平面树视图,第二个依赖于SelectedItem
第一个。HierarchicalDataTemplate
根本不需要。只是一个普通的DataTemplate
。
据我了解,您需要顶级节点,以及这些节点的 1 级子节点,并且不再需要(因此总体上将有 2 级节点)。然后,如果您想在 XAML 中执行此操作,则可以使用 2 个模板来执行此操作:
<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
,但如果你愿意,你可以将它替换为下一个级别的其他模板(包括一个 plain DataTemplate
)。