WPF ListView - 按嵌套属性排序

Nol*_*rin 5 sorting wpf listview properties nested-properties

我最近偶然发现一个问题,WPFListView控件似乎限制了对其项目进行排序的能力。SortDescription具体来说,我在尝试识别嵌套属性(属性的属性)时遇到了很大的麻烦。

对于按属性直接排序,以下行应该完成这项工作:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty",
    ListSortDirection.Ascending));
Run Code Online (Sandbox Code Playgroud)

事实上,它对我来说效果很好。但是,因为ItemSourcefor myListView是 (强类型) DataTable,所以某些列绑定到行的嵌套属性(即Row.OtherTableRow.SubProperty绑定路径样式) - 这是 ADO.NET 数据集用于分层数据库的方式。

我想做的是这样的:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty",
    ListSortDirection.Ascending));
Run Code Online (Sandbox Code Playgroud)

但不幸的是,该行抛出一个ArgumentException

“Orders”类型没有名为“Row.[ID]”的属性,因此无法对数据集合进行排序。

奇怪的是,我在绑定嵌套属性时没有任何问题。事实上,这些字段在...中显示得很好......ListView添加 a 也不PropertyGroupDescription会给listView.GroupDescriptions我带来嵌​​套属性的任何问题 - 它只是SortDescriptions

这只是 WPF/控件的限制吗ListView?作为框架的一部分,我有什么办法可以获得支持,或者我会运气不佳吗?如果不幸的是,并且这种不一致是不可避免的,如果有人能为这种嵌套属性的场景建议一种破解或解决方法,我将非常感激。我已经尝试过一些想法,但都收效甚微。

注意:我意识到 ORM 可以很好地解决我的问题,但恐怕这对于我当前正在从事的项目来说根本不可行。简单的 ADO.NET 数据集就可以了。

小智 3

根据 Windows Presentation Foundation Unleased (Adam Nathan),您可以将默认视图强制转换为 ListCollectionView,并将自定义 IComparer 实现设置为其 CustomSort 属性。