<分区>
我正在尝试从此更改数据绑定(bind) TreeView 的布局:
对此:
当然选择必须正常工作:
关于如何做到这一点,您有什么想法吗?我一直在尝试更改模板,但找不到实现此行为的方法。也许一个组件已经存在...
感谢您的帮助!
<分区>
我正在尝试从此更改数据绑定(bind) TreeView 的布局:
对此:
当然选择必须正常工作:
关于如何做到这一点,您有什么想法吗?我一直在尝试更改模板,但找不到实现此行为的方法。也许一个组件已经存在...
感谢您的帮助!
最佳答案
这很难。它似乎需要一个 HierarchicalDataTemplate
,但是因为您想要的行为需要多个 ItemsControl,所以它不会按预期工作。我认为没有一种方法可以在 XAML 中创建一个 TreeView
模板来执行此操作。最好的办法是创建某种自定义项目控件。您可能需要在代码中而不是在 XAML 中执行项目绑定(bind),因为没有 HierarchicalDataTemplate
,XAML 无法理解嵌套关系。
也就是说,如果保证只有 2 层嵌套(如您的示例所示),您可以使用以下标记轻松地做到这一点:
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</Window.Resources>
<StackPanel Orientation="Horizontal">
<ListBox Name="Level1" Width="150" Height="150"
ItemsSource="{Binding Collection}"
ItemTemplate="{StaticResource ItemTemplate}"/>
<ListBox Name="Level2" Width="150" Height="150"
ItemsSource="{Binding ElementName=Level1, Path=SelectedValue.Children}"
ItemTemplate="{StaticResource ItemTemplate}"/>
<ListBox Name="Level3" Width="150" Height="150"
ItemsSource="{Binding ElementName=Level2, Path=SelectedValue.Children}"
ItemTemplate="{StaticResource ItemTemplate}"/>
</StackPanel>
Collection
是您的根项目集合,每个项目都有一个名为 Children
的属性,其中包含子集合。
但我认为您要求的是一个项目控件,它可以支持任意数量的嵌套级别,而不仅仅是 2 个。所以在那种情况下,我会在代码隐藏中执行此操作。绑定(bind)将是相同的 - 也就是说,在每个级别,ListBox
应该绑定(bind)到父级别的项目。但是您显然需要为每个嵌套级别迭代并创建一个 ListBox
。
关于wpf - 将 TreeView 的布局更改为看起来像多个 ListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369901/