出于性能原因,我将 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
任何指向正确方向的指针将不胜感激。