从第二个项目向下排序ListCollectionView

时间:2012-07-08 17:14:36

标签: wpf sorting listcollectionview

在MVVM环境中,我有一个绑定到ObservableCollection的ListCollectionView。我的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的情况吗?

1 个答案:

答案 0 :(得分:3)

是的,这正是您需要使用ListCollectionView.CustomSort的情况。自定义排序与使用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);
        }
    }
}