Условия 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();