层次结构数据模板:仅限一级子级

本文关键字:一级 数据 层次结构 | 更新日期: 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)。