0

在 MVVM 环境中,我将 ListCollectionView 绑定到 ObservableCollection。我的 Foo 对象对它们有一个 IsDefault 属性,我的要求是将该项目放在列表的第一位,其余的应该是 alpha 排序的。

所以这段代码只对整个列表进行排序,显然:

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

不确定如何确保第 3 项(例如,IsDefault=true)位于列表顶部,而其余项(IsDefault=false)按 alpha 排序。

这是使用 _list.CustomSort 并以某种方式实现 IComparer 的情况吗?

4

1 回答 1

3

是的,这正是您需要使用ListCollectionView.CustomSort. 自定义排序与 using 是互斥的SortDescriptions;前者的文档对此很明确:

设置此属性会清除先前设置的 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 回答