如何在WPF中使用数据绑定创建具有无限深度的TreeView?

3
我需要创建一个支持无限父子层级的TreeView。这个TreeView需要绑定到一个名为ResourceList的列表上,它会从一个名为Children的列表中获取其子资源。所有项都是相同类型的。
这是我目前拥有的XAML代码:
    <TreeView ItemsSource="{Binding ResourceList}" Grid.Column="0" Grid.Row="2" x:Name="ResourcesTree" SelectedItemChanged="ResourcesTree_OnSelectedItemChanged" Margin="0,4,0,0">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}" />
                <HierarchicalDataTemplate.ItemTemplate>
                    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                        <TextBlock Text="{Binding Name}" />
                        <HierarchicalDataTemplate.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Name}" />
                            </DataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                    </HierarchicalDataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

它有效,但问题是,它只深入三层。我应该改变什么来使它无限制?

如果重要的话,我正在使用C#和.NET作为代码后端。

1个回答

5
您的 Treeview 应该长成这个样子:
<TreeView ItemsSource="{Binding ResourceList}" Grid.Column="0" Grid.Row="2" x:Name="ResourcesTree" SelectedItemChanged="ResourcesTree_OnSelectedItemChanged" Margin="0,4,0,0">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type childType}" ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}" />
            </HierachicalDataTemplate>
        </TreeView.ItemTemplate>
</TreeView>

请注意,childType 应该是您的树所组成的任何类。

重要的部分是 DataType="{x:Type childType}",它确保所有子元素(和孙子元素等)使用此数据模板,并为您处理层级方面的问题。


谢谢!它起作用了!结果证明这真的很简单,所以我很惊讶我的尝试在谷歌搜索它时没有得到正确的结果。 - Zerbu
是的,第一次尝试使用TreeView时,我花了很长时间才弄明白。WPF为您完成所有繁重的工作,这很棒。 - Gordon Allocman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接