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

时间:2016-03-31 19:28:45

标签: .net wpf xaml treeview hierarchicaldatatemplate

我需要创建一个具有无限父子层次结构的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 个答案:

答案 0 :(得分:3)

你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}",它确保所有孩子(和孙子等等)使用这个数据模板,并为你处理它的层次方面