我有一个TreeView
包含三个级别的。
可以说它是一个联赛,一个部门和一个团队TreeView
。
现在,当我选择树中的每个项目时,我想查看有关它的详细信息。
实现这一目标的最佳方法是什么?
由于Grid
没有项目(如 a ListBox
),我不能只设置它ItemsSource
并制作DataTemplate
...
我考虑过使用ListBox
只包含所选项目的,但这似乎很糟糕......
谢谢。
我有一个TreeView
包含三个级别的。
可以说它是一个联赛,一个部门和一个团队TreeView
。
现在,当我选择树中的每个项目时,我想查看有关它的详细信息。
实现这一目标的最佳方法是什么?
由于Grid
没有项目(如 a ListBox
),我不能只设置它ItemsSource
并制作DataTemplate
...
我考虑过使用ListBox
只包含所选项目的,但这似乎很糟糕......
谢谢。
DataTemplate
您首先为您的联赛、分区和团队类别定义 3 s。之后,将 绑定TreeView
到对象的根目录。你的 League 和 Division 类应该有一个 Children 属性来返回孩子。你所有的类都应该有一个 Name 属性。
然后,当您要显示单个对象时,请使用ContentPresenter
,并将其内容绑定到SelectedItem
if TreeView
。
例如:
<StackPanel>
<StackPanel.Resources>
<DataTemplate DataType="{x:Type your_namespace:League}">
<StackPanel Orientation="Vertical">
<TextBlock Text={Binding Name}/>
<.../>
<StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type your_namespace:Division}">
<StackPanel Orientation="Vertical">
<TextBlock Text={Binding Name}/>
<.../>
<StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type your_namespace:Team}">
<StackPanel Orientation="Vertical">
<TextBlock Text={Binding Name}/>
<.../>
<StackPanel>
</DataTemplate>
</StackPanel.Resources>
<TreeView x:Name="_tree" ItemsSource="{Binding RootOfYourItems}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text={Binding Name}/>
</HierarchicalDataTemplate>
</TreeView>
<ContentPresenter Content="{Binding Path=SelectedItem, ElementName=_tree}" />
</StackPanel>
此代码未经测试或编译,仅作为示例提供。
我会创建一个视图模型,其中包含树结构的属性、当前选择和当前选择的详细信息。
树结构是单向绑定到树视图的,树视图中的 SelectedItem 是绑定到当前选择属性的 OneWayToSource(由于属性的限制)。一旦当前选择更改,此属性会更改子项列表,并且子项绑定到显示它们的列表框。