在WPF TreeView中对子对象进行分组
我试图让我的树视图按照它们的类别对类似项目的集合进行分组。 为了保持通用性,我的对象层次结构可能如下所示:
- 对象
- 对象组#1
- 项目#1(类型’A’)
- 项目#2(类型’A’)
- 项目#3(类型’B’)
- 项目#4(类型’B’)
- 对象组#1
现在我的TreeView显示这些对象与对象模型完全一样,但我想要做的是为每个对象类型插入一个TreeView节点,使它看起来像这样:
- 对象
- 对象组#1
- A型
- 项目#1
- 项目#2
- B型
- 项目#3
- 项目#4
- A型
- 对象组#1
我在这里看到一个类似的问题,有人建议有两个独立的HierarchicalDataTemplates
所以我创建了一个’Object Group#1’级别,其中包含一个带有类型列表的TreeView,但这实际上是笨拙的,因为它是一个完整的单独TreeView在一些节点内。 我也一直在尝试使用CollectionViewSource
来过滤掉每个类别中的项目,但这对我来说并不是很好,因为我无法弄清楚如何显示它们。
我想我的问题归结为:我如何将HierarchicalDataTemplate
组作为子项? 如果有人能指出我正确的方向,我会非常感激。
我可以发布一些代码,如果有人想看,但我真的只是想弄清楚如何做我想要的,所以我的代码现在只是一个非常直接的数据绑定树视图。
看看Sumi先生的这篇文章。 我相信它会对你有所帮助。
您可以通过使用IValueConverter
HierarchicalDataTempalate
上的ItemsSource
来实现此效果。 此转换器只是执行以下操作:
public class MyConverter : IValueConverter { public object Convert(object value, ...) { return from item in (IEnumerable)value group item by item.Type into g select new { Type = item.Type, Items = g }; } ... }
现在你的HierarchcialDataTemplate
可以如下:
AFAIK, HierarchicalDataTemplate
无法对其子项进行分组。
视图应该只显示它获得的内容,而不是真正挖掘对象种类/组…为什么不在对象模型中创建这些组?
这个视图就像是:
public interface ITreeNode { string Title; IList ChildNodes; }
并使用HierarchicalDataTemplate
显示它。
如果这是一个来自Flat Collection的简单分组方法,用于显示目的,您正在寻找可能使用“CollectionViewSource”将更合适。 由于Property / Collection Change事件传播,使用LINQ可能会成为一场噩梦。