あなたは簡単にそれを行うためにLINQを使用することができます。
List<string> list = GetTheStringsFromSomewhere();
List<string> ordered = list.OrderBy(p => p.Length).ThenBy(p => p).ToList();
はEDIT:
あなたはあなたのコメントにCustomSort
とSortDescription
を述べました。 私はあなたがあなた自身の比較子を圧延することによって、同じ結果を達成することができるはずです(未検証)だと思う:
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();
私が実際にそのようにSortDescriptionまたはCustomSortのいずれかを使用するように期待してい私は、コレクションが変更されたときに必ずソートする必要はありません。 –
申し訳ありませんが、私はあなたのポイントを取得できませんか? – khlr
メインポストを更新しました。私はListBox ItemsSourceにバインドするListCollectionViewを持っています。 ListBoxの内外にアイテムをドラッグできるので、コレクションが変更される可能性があり、コレクションが変更されるたびに、それを私が望むように並べ替えることができます。私がLINQを使用している場合は、コレクションが変更されたときはいつでもそれを並べ替える必要があります。それで、SortDescriptionやCustomSortを使うことができるので、コレクションが変更されたときにUIが自動的にソートできるようになります。 –