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

How do you use data binding to create a TreeView with infinite depth in WPF?

我需要创建一个具有无限父子层次结构的 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 作为代码隐藏。

您的 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 应该是 class 你的树是由什么组成的。

重要的部分是 DataType="{x:Type childType}",它确保所有子代(和孙代等)都使用此数据模板,并为您处理它的层次结构方面