关于 wpf:ListView Inside Child TreeViewItem?

ListView Inside Child TreeViewItem?

大家好,
我有一个具有三个节点的 WPF TreeView,我希望最后一个子节点(第三个节点)包含一个填充了我的绑定数据的 ListView。我遇到的问题是,如果我在 HierarchicalDataTemplate 的 ItemTemplate 中放置一个 ListView,我会为每个孩子获得一个 ListView,而不是一个包含内容的 ListView。这是文档中的预期行为,但我正在寻找解决方法(可能修改 ItemContainerStyle),不幸的是,我几乎没有使用 TreeViewItem 的控件模板的经验,或者一般而言对 TreeViews 有很多经验。

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

有没有人已经经历过将 ListView 夹在 TreeViewItem 中的麻烦,或者有人可以建议如何修改 ControlTemplate 来实现这一点?

谢谢你,
Aj


事实证明,处理这种情况的最简单方法是将第二个节点上的 HierarchicalDataTemplate 替换为 Expander,在 ListView 而不是 HierarchicalDataTemplate 上设置 ItemsSource,并将 Expander 上的按钮重新设置样式,使其看起来像一个 TreeViewItem.... 有点像 hack 但它可以工作:)

感谢大家的帮助,

Aj


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

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

1
2
3
4
5
6
7
8
9
<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>