在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的情况吗?
答案 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);
}
}
}