ListCollectionView CustomSort 2条件

时间:2016-05-17 08:59:27

标签: c# wpf sorting listcollectionview

我的ViewModel中有一个ListCollectionView,它将它绑定到ListBox。假设我有一个字符串集合,我首先想要按字符串长度排序,然后按字母顺序排序。我该怎么办?

目前我通过实现我自己的IComparer类使用CustomSort按长度对其进行排序,但我怎么能这样做,使得它对于长度相同的字符串也按字母顺序排列。

1 个答案:

答案 0 :(得分:2)

您可以轻松使用LINQ来执行此操作:

List<string> list = GetTheStringsFromSomewhere();
List<string> ordered = list.OrderBy(p => p.Length).ThenBy(p => p).ToList();

修改

您在评论中提到了CustomSortSortDescription。 我认为(未经测试)您应该能够通过滚动自己的Comparer来获得相同的结果:

public class ByLengthAndAlphabeticallyOrderComparer : IComparer
{
    int IComparer.Compare(Object x, Object y)
    {
        var stringX = x as string;
        var stringY = y as string;

        int lengthDiff = stringX.Length - stringY.Length;           
        if (lengthDiff !=)
        {
            return lengthDiff < 0 ? -1 : 1; // maybe the other way around -> untested ;)
        }

        return stringX.Compare(stringY);
    }
}

用法:

_yourListViewControl.CustomSort = new ByLengthAndAlphabeticallyOrderComparer();