2009-07-23 63 views
1

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

对于由propreties直接的排序,下面一行应该做的工作:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty", 
    ListSortDirection.Ascending)); 

事实上它很适合我。但是,因为我的ListViewItemSource是(强类型)DataTable,所以某些列绑定到该行的嵌套属性(即Row.OtherTableRow.SubProperty绑定路径样式) - 这是ADO.NET DataSet适用于分层数据库的方式。

我想什么做的是这样的:

listView.Items.SortDescriptions.Add(new SortDescription("MyProperty.SubProperty", 
    ListSortDirection.Ascending)); 

但遗憾的是该行抛出ArgumentException

“订单”式没有名为“Row属性[ID ]',所以不能对数据收集进行排序。

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

这是WPF/ListView控件的限制吗?作为框架的一部分,我有没有办法获得支持,还是我会在那里运气不好?如果我不幸的是,而且这种不一致是不可避免的,我会非常感谢,如果有人可以提出一个黑客或解决方案嵌套属性的这种情况。我已经尝试了一些想法,但都取得了最小的成功。

注:我意识到一个ORM可能很好地解决了我的问题,但恐怕这对于我正在开发的当前项目来说根本不可行。简单的ADO.NET DataSets将不得不做。

回答

1

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

+0

干杯。如果它能很好地涵盖其他高级场景,我可以看看那本书。 :) – Noldorin 2009-07-23 21:48:49