我有TreeView
,有三个级别。
让我们说它是一个联盟,分区和团队TreeView
。
现在,当我选择树中的每个项目时,我希望看到有关它的详细信息。
实现这一目标的最佳途径是什么?
由于Grid
没有项目(例如ListBox
),我不能只设置其ItemsSource
并制作DataTemplate
...
我考虑过使用只包含所选项目的ListBox
,但这似乎非常糟糕......
感谢。
答案 0 :(得分:1)
首先为你的联赛,分区和团队课程定义3 DataTemplate
s。之后,将TreeView
绑定到对象的根目录。您的League和Division类应该有一个返回子项的Children属性。你的所有类都应该有一个Name属性。
然后,当您想要显示单个对象时,请使用ContentPresenter
,如果SelectedItem
,则将其内容绑定到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>
此代码未经过测试或编译,仅作为示例提供。
答案 1 :(得分:0)
我会创建一个viewmodel,其中包含树结构的属性,当前选择以及当前选择的详细信息。
树结构是单向绑定到树视图,树视图中的SelectedItem是绑定到当前选择属性的OneWayToSource(由于属性的限制)。一旦当前选择发生更改,此属性将更改子项列表,并且子项将绑定到显示它们的列表框。