出于性能原因,我将 aListCollectionView与一个CustomSort排序器一起使用,而不是多个SortDescriptions.
使用SortDescriptions,按多个级别对数据进行排序是相当容易的,但我坚持对IComparer下面的 , 做同样的事情。
目的是将所有Favorite( bool) 分组在顶部,在所有收藏夹中,按Count( int) 排序,最后按Name( string) 排序。
我目前的IComparer实现:
public class CustomSorter : IComparer
{
public int Compare(object a, object b)
{
var gA = a as MyObj;
var gB = b as MyObj;
var favourite = gA.Favorite.CompareTo(gB.Favorite);
var count = gA.Count.CompareTo(gB.Count);
var name = gA.Name.CompareTo(gB.Name);
return favourite != -1 ? favourite : count != -1 ? count : name;
}
}
我的理由是:如果a不大于b,Favorite那么检查它Count,最后检查Name。
不幸的是,上面的IComparer实现并没有产生预期的结果——排序无处不在。
它应该如下所示:
1. true 100 Z
2. true 50 A
3. true 50 B
4. true 10 A
5. false 100 Z
6. false 50 A
7. false 100 A
8. false 100 B
任何指向正确方向的指针将不胜感激。