刚接触C#,我发现CustomSort清除了SortDescriptions,现在我对如何允许自定义多列排序数据网格感到困惑。
中查看我的代码我想弄清楚的具体路线是:
lcv.CustomSort = new IntegerSorter(lcv.SortDescriptions);
在我的IntegerSort自定义排序中,我正在检查SortDescriptions是否包含多个列,如果是,则相应地执行多列排序。然而,这依赖于以下事实:每次用户执行shift +单击列时,它会将排序描述附加到ListCollectionView。哪个不起作用,因为它在每次自定义排序后重置。
是否有任何已知的解决方法?使用自定义排序进行多列排序的正确方法是什么?
非常感谢。
答案 0 :(得分:0)
首次创建自定义排序时,可以为其提供ListCollectionView具有的排序说明列表。
下次用户转移点击次数时,如果lcv.SortDescriptions
为空,lcv.CustomSort
将不会null
。它将是您上次给出的IntegerSort
,并且它仍然会传递给您的构造函数的SortDescriptions列表。抓住它:
var intSort = lcv.CustomSort as IntegerSort;
创建一个新集合,并使用新列表创建一个新的IntegerSort
。
如果IntegerSort
没有将SortDescriptions作为公共属性提供,请将其设置为公共属性。
或者如果你想保持私有,为此目的为IntegerSort编写一个新的构造函数:
public IntegerSort(IntegerSort oldSort, SortDecsription add, SortDecsription remove = null)
{
// Put the new collection together
}
像这样使用:
lcv.CustomSort = new IntegerSort(lcv.CustomSort as IntegerSort, sortedColumnDescription);