ListView Inside Child TreeViewItem?

时间:2010-11-30 17:14:06

标签: wpf listview treeview wpf-controls treeviewitem

嘿伙计们, 我有一个有三个节点的WPF TreeView,我希望最后一个子节点(第三个节点)包含一个填充了我的绑定数据的ListView。我遇到的问题是,如果我将ListView放在我的HierarchicalDataTemplate的ItemTemplate中,我会为每个子节点而不是单个带有内容的ListView获取ListView。这是文档的预期行为,但我正在寻找一种解决方法(可能修改ItemContainerStyle),遗憾的是我几乎没有使用TreeViewItem的控件模板,或者对于TreeViews的一般体验。

我已经看过使用TreeListView的可能性,但它不适合我的用例,也没有绑定单独的控件并以这种方式显示数据。

有没有人经历过将ListView夹在TreeViewItem中的头痛,或者有人建议如何修改ControlTemplate来实现这一目标?

谢谢你, AJ

2 个答案:

答案 0 :(得分:0)

具有Listview的节点应该是与其他两个节点不同的数据类型,因此Treeview可以对其进行不同的处理。 另外,听起来包含列表视图数据的子项不应该是HierarchicalDataTemplate而是常规DataTemplate,因为它没有Treeview识别的其他子元素。您可以根据需要在Treeview中混合和匹配HierarchicalDataTemplate和常规DataTemplates,常规DataTemplates表示“叶子”节点,它们没有任何子节点。

使用Treeview中使用的不同数据类型但仍使用分层模板的示例:

<HierarchicalDataTemplate DataType="{x:Type FooNormal}" ItemsSource="{Binding TreeviewChildNodeCollection}">
   // do something else here.
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type FooList}" ItemsSource="{Binding TreeviewChildNodeCollection}">
  <ListView  ItemsSource="{Binding ListviewChildNodeCollection}">
   //use listview here
  </ListView>
</HierarchicalDataTemplate>

答案 1 :(得分:0)

原来处理这种情况的最简单方法是用Expander替换第二个节点上的HierarchicalDataTemplate,在ListView而不是HierarchicalDataTemplate上设置ItemsSource,并将Expander上的按钮重新设置为类似于一个TreeViewItem .... sorta a hack但它有效:)

感谢所有帮助,

AJ