是否可以拥有纯粹的分层wpf数据网格?现在有3种可能的解决方案在互联网上讨论......
现在所有3个都没有用,因为它们都有局限性。
GroupStyle
提供了分组的行演示者,但其父级只是GroupItem
。这是我的数据源不同的地方。在我的情况下,分组项目的父项将是相同类型的项目。
e.g。 Folder
班级有List<Folders> children
。因此子文件夹的父级本身是Folder
类型。
RowDetailsTemplate
需要我托管另一个绑定到Children
的数据网格,但这意味着它会有自己的列标题,而我想要的是分享>的子项strong>父DataGrid的相同列视图,就像它们在TreeListView
中一样。
对于TreeListView
,这就是我现在正在使用的,但它的问题是......
它失去了虚拟化,它不是数据网格
: - )
我正在考虑一些附加行为,切换数据网格的层次结构视图,如...
<DataGrid HierarchicalBehavior.HierarchyPath="Children" ... />
其中Children
是每个项目下IEnumerable
类型的属性。
我希望你们明白我的目标。
有什么想法吗?
答案 0 :(得分:2)
我终于可以实现这个了。代码太大,无法发布。但如果有人在寻找解决方案,请发送电子邮件给我。
基本上我做了以下事情......
INotifyPropertyChanged
,并通过基类跟踪了额外的属性.. 家长 =&gt;这个项目是儿童的父项目。只读的。
HasHierarchy =&gt;层次结构子项为null或为空时为False。可写的。
IsItemVisible =&gt;目前的可见度。可写的。
IsBranchVisible =&gt;如果任何祖先具有IsExpanded = false或IsItemVisible = false,则返回false。 ReadOnly但可通知。
IsExpanded =&gt;如果项目已展开。可写的。
3. I put a PLINQ call to filter the `IsBranchVisible` property as true, of all children whenever any descenden's `IsExpanded` property is **toggled**.
Voala!它就像魅力一样。由于PLINQ而快速。