2009-06-12 85 views
12

我想排序從CollectionViewSource派生的集合,它只是有SortDescriptions進行排序。不幸的是,我需要能夠使用我自己的自定義IComparer,但我似乎無法找到一種方法來做到這一點。想想一個數據網格,我有自己的多列排序算法。我在想一種方法是使用一個實現CollectionChanged的集合,這是CollectionViewSource和我的真實數據源之間的一個附加層,但如果有人有任何建議,我真的更喜歡更好的方法。使用自定義IComparer排序CollectionViewSource

回答

13

Bea Stollnitz有一個自定義排序示例here

該文章的關鍵點是將CollectionViewSource綁定到IList實現,而不是較弱的ICollectionIEnumerable接口。與此同時,View財產返回ListCollectionView實例而不是CollectionView。然後,您可以使用ListCollectionView.CustomSort指定一個IComparer來執行您的自定義排序。爲了使事情更容易,您可以另外使用Comparer<T>.Create方法來使用代理,而不是整個類。

+1

該文章的關鍵點是將`CollectionViewSource`綁定到`IList`實現,而不是一個較弱的`ICollection`或`IEnumerable`接口。與此同時,`View`屬性返回一個`ListCollectionView`實例,而不是`CollectionView`。然後你可以使用`ListCollectionView.CustomSort`來指定一個`IComparer`來完成你的自定義排序。爲了使事情更容易,您可以另外使用[`Comparer .Create`](http://msdn.microsoft.com/zh-cn/library/hh737198.aspx)方法來使用「比較」代表而不是全班。 – ygoe 2015-08-11 06:37:59