我在WPF中的TreeView有一些问题。我有三个互相包含的藏品。所以,我有一个组类型,其中有一个MasterActions ObservableCollection。在MasterAction中有一个SlaveActions ObservableCollection。组、MasterAction和SlaveAction类具有描述属性。我想将它们绑定到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描述?
提前谢谢。
发布于 2014-05-27 18:34:46
看起来,如果您试图在HierarchicalDataTemplate中达到一个层次太深的程度。在代码中将ItemsSource设置为Groups
TreeViewResult.ItemsSource = handler.Groups;实际上,您如何设置它(在代码中或通过绑定)并不重要,更重要的是顶级项是Group,并且将顶级HierarchicalDataTemplate.ItemsSource绑定到Groups。而不是将所有东西向上移动一个级别,并将顶级ItemsSource绑定到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
https://stackoverflow.com/questions/23896442
复制相似问题