如何使用数据绑定在 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}"
,它确保所有子代(和孙代等)都使用此数据模板,并为您处理它的层次结构方面
我需要创建一个具有无限父子层次结构的 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}"
,它确保所有子代(和孙代等)都使用此数据模板,并为您处理它的层次结构方面