2016-05-17 2 views
0

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

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

ответ

2

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

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

EDIT:

Вы упомянули 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(); 
+0

Я на самом деле ожидал использовать либо SortDescription или CustomSort, так что Мне не нужно всегда сортировать его, когда коллекция меняется. –

+0

Извините, я не понимаю вашу точку зрения. – khlr

+0

Я обновил свой основной пост. У меня есть ListCollectionView, который я привязываю к элементу ListBox ItemsSource. Я могу перетаскивать элементы в ListBox и из него, поэтому коллекция может меняться, и всякий раз, когда меняются коллекции, я хочу, чтобы ее заказывали так, как я хотел. Если я использую LINQ, мне всегда нужно будет его переупорядочивать всякий раз, когда изменяется коллекция. Так что я могу использовать SortDescription или CustomSort, чтобы пользовательский интерфейс мог автоматически сортироваться для меня, когда коллекция меняется. –

Смежные вопросы