Условия ListCollectionView CustomSort 2

У меня есть ListCollectionView в моем ViewModel, который я связываю его с ListBox. Допустим, у меня есть коллекция строк, где я сначала хочу отсортировать их по длине строки, а затем по алфавиту. Как я должен это делать?

В настоящее время я пытаюсь отсортировать его по длине, используя CustomSort, реализуя свой собственный класс IComparer, но как я могу сделать это так, чтобы он также был в алфавитном порядке для строк одинаковой длины.

1 ответ

Решение

Вы можете легко использовать LINQ для этого:

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

РЕДАКТИРОВАТЬ:

Ты упомянул CustomSort а также SortDescriptionв вашем комментарии. Я думаю (не проверено), что вы должны быть в состоянии достичь того же результата, выполнив свой собственный 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();
Другие вопросы по тегам