2016-05-17 6 views
0

私はそれをListBoxにバインドする私のViewModelにListCollectionViewを持っています。私は文字列のコレクションを持っているとしましょう。最初に文字列の長さで並べ替え、次にアルファベット順に並べ替えることを考えてみましょう。私はどうすればいいのですか?ListCollectionView CustomSort 2条件

現在、私は独自のIComparerクラスを実装してCustomSortを使用して長さを並べ替えることにしていますが、同じ長さの文字列のアルファベット順でも同様に行うことができます。

答えて

2

あなたは簡単にそれを行うためにLINQを使用することができます。

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

はEDIT:

あなたはあなたのコメントにCustomSortSortDescriptionを述べました。 私はあなたがあなた自身の比較子を圧延することによって、同じ結果を達成することができるはずです(未検証)だと思う:

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

メインポストを更新しました。私はListBox ItemsSourceにバインドするListCollectionViewを持っています。 ListBoxの内外にアイテムをドラッグできるので、コレクションが変更される可能性があり、コレクションが変更されるたびに、それを私が望むように並べ替えることができます。私がLINQを使用している場合は、コレクションが変更されたときはいつでもそれを並べ替える必要があります。それで、SortDescriptionやCustomSortを使うことができるので、コレクションが変更されたときにUIが自動的にソートできるようになります。 –

関連する問題