0

MVVM 環境では、ObservableCollection にバインドされた ListCollectionView があります。私の Foo オブジェクトには IsDefault プロパティがあり、私の要件はその項目をリストの最初に置き、残りをアルファ ソートする必要があることです。

したがって、このコードはリスト全体をソートするだけです。

_list = new ListCollectionView(Model.Data);
        _list.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

アイテム #3 (たとえば、IsDefault=true を持つもの) がリストの一番上にあり、残り (IsDefault=false を持つもの) がアルファ ソートされるようにする方法がわかりません。

これは _list.CustomSort を使用し、何らかの方法で IComparer を実装する場合ですか?

4

1 に答える 1

3

はい、これはまさにあなたが使用する必要がある場合ですListCollectionView.CustomSortSortDescriptionsカスタムソートは、;を使用することと相互に排他的です。前者のドキュメントはこれについて明示的です:

このプロパティを設定すると、以前に設定されたSortDescriptions値がクリアされます。

したがって、実行する必要があるのは、を定義し、IComparerそれを使用してビューを並べ替えることです。

class CustomComparer : IComparer
{
    public int Compare (object lhs, object rhs)
    {
        // missing: checks for null, casting to Model.Data, etc etc

        if (lhsModelData.IsDefault && rhsModelData.IsDefault) {
            return lhsModelData.Name.CompareTo(rhsModelData.Name);
        }
        else if (lhsModelData.IsDefault) {
            return -1;
        }
        else if (rhsModelData.IsDefault) {
            return 1;
        }
        else {
            return lhsModelData.Name.CompareTo(rhsModelData.Name);
        }
    }
}
于 2012-07-08T17:28:26.223 に答える