使用自定义IComparer对CollectionViewSource进行排序

dar*_*ins 13 c# wpf

我正在尝试对从CollectionViewSource派生的集合进行排序,该集合只有SortDescriptions用于排序.不幸的是我需要能够使用我自己的自定义IComparer,但我似乎找不到办法做到这一点.想想数据网格,我有自己的多列排序算法.我想一种方法是使用一个实现CollectionChanged的集合,它是CollectionViewSource和我的真实数据源之间的附加层,但如果有人有任何建议,我真的更喜欢更好的方法.

mic*_*tan 15

Bea Stollnitz 在这里有一个自定义排序示例.

该文章的关键点是绑定CollectionViewSourceIList实现而不是弱ICollectionIEnumerable接口.有了它,该View属性返回一个ListCollectionView实例而不是CollectionView.然后,您可以使用ListCollectionView.CustomSort分配IComparer来进行自定义排序.为了简化操作,您还可以使用该Comparer<T>.Create方法来使用Comparison委托而不是整个类.

  • 补充一点:“CustomSort”和“SortDescriptions”的使用是互斥的,不能同时使用两者。设置其中一项会自动清除另一项。因此对于多列排序,这也需要由自定义比较器来处理! (3认同)