我在 WPF 中使用 TreeView 时遇到一些问题。 我有三个相互包含的集合。 所以,我有一个 Group 类型,其中有一个 MasterActions ObservableCollection。 在 MasterAction 中有一个 SlaveActions ObservableCollection。 Group、MasterAction 和 SlaveAction 类都有一个 Description 属性。 我想将它们绑定(bind)到 TreeView。 我尝试了 HierarchicalDataTemplate 构造,但它不起作用。
有Xaml代码:
<TreeView x:Name="TreeViewResult" HorizontalAlignment="Stretch" ItemsSource="{Binding}" VerticalAlignment="Stretch" Margin="10,10,10,10" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Groups}">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="3" Text="{Binding Description}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding MasterActions}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Description}"/>
</StackPanel>
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SlaveActions}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Description}"/>
</StackPanel>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
隐藏代码:
Handler handler = new Handler();
Group group1 = new Group("group1_description");
MasterAction masterAction11 = new MasterAction("masterAction11");
SlaveAction slaveAction111 = new SlaveAction("slaveAction111");
SlaveAction slaveAction112 = new SlaveAction("slaveAction112");
MasterAction masterAction12 = new MasterAction("masterAction12");
MasterAction masterAction13 = new MasterAction("masterAction13");
SlaveAction slaveAction131 = new SlaveAction("slaveAction131");
handler.Add(group1);
handler.Add(masterAction11);
handler.Add(slaveAction111);
handler.Add(slaveAction112);
handler.Add(masterAction12);
handler.Add(masterAction13);
handler.Add(slaveAction131);
Group group2 = new Group("group2_description");
MasterAction masterAction21 = new MasterAction("masterAction21");
MasterAction masterAction22 = new MasterAction("masterAction22");
SlaveAction slaveAction221 = new SlaveAction("slaveAction221");
SlaveAction slaveAction222 = new SlaveAction("slaveAction222");
SlaveAction slaveAction223 = new SlaveAction("slaveAction223");
SlaveAction slaveAction224 = new SlaveAction("slaveAction224");
handler.Add(group2);
handler.Add(masterAction21);
handler.Add(masterAction22);
handler.Add(slaveAction221);
handler.Add(slaveAction222);
handler.Add(slaveAction224);
TreeViewResult.ItemsSource = handler.Groups;
Handler.Add() 是一个重载方法。它管理构建树的所有三个参数。
group1_description
masterAction11
slaveAction111
slaveAction112
masterAction12
masterAction13
slaveAction131
group2_description
masterAction21
masterAction22
slaveAction221
slaveAction222
slaveAction223
slaveAction224
当我运行代码时,它会生成下一个:
如何才能让所有MasterActions和SlaveActions描述出现在右侧节点下?
提前致谢。
最佳答案
看起来您似乎试图使用 HierarchicalDataTemplate
进入太深的一层。您将代码中的 ItemsSource
设置为 Groups
TreeViewResult.ItemsSource = handler.Groups;
实际上如何设置它(在代码中或通过绑定(bind))并不重要,更重要的是顶级项目是一个Group
并且您绑定(bind)顶级HierarchicalDataTemplate.ItemsSource
到组
。而不是将所有内容向上移动一个级别并将顶级 ItemsSource
绑定(bind)到 MasterActions
,下一个级别到 SlaveActions
以及最低级别可以是简单的 DataTemplate
将显示没有子节点的 Description
<TreeView
x:Name="TreeViewResult"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Margin="10,10,10,10" >
<!-- top node will be a Group -->
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding MasterActions}">
<TextBlock Margin="3" Text="{Binding Description}"/>
<!-- child node will be a MasterAction -->
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SlaveActions}">
<TextBlock Text="{Binding Description}"/>
<!-- leaf will be a SlaveAction -->
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Description}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
另外,与您的问题无关,但由于您显示单个 TextBlock
您不需要 StackPanel
关于c# - 多层次数据模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896442/