多列 ListCollectionView 上的 CustomSort

CustomSort on multi-column ListCollectionView

作为 C# 的新手,我刚刚发现 CustomSort 清除了 SortDescriptions,现在我对如何允许对我的数据网格进行自定义多列排序有点困惑。

你可以在

中看到我的代码

我想找出的特定行是这样的:

lcv.CustomSort = new IntegerSorter(lcv.SortDescriptions);

在我的 IntegerSort 自定义排序中,我正在检查 SortDescriptions 是否包含多列,如果是,则相应地执行多列排序。然而,这依赖于这样一个事实,即每次用户在列上执行 shift+click 时,它都会将排序描述附加到 ListCollectionView。这是行不通的,因为它会在我进行每次自定义排序后重置。

是否有任何已知的解决方法?使用自定义排序进行多列排序的正确方法是什么?

非常感谢。

当您第一次创建自定义排序时,您为它提供了 ListCollectionView 具有的排序描述列表。

下次用户shift点击时,如果lcv.SortDescriptions为空,lcv.CustomSort就不会是null。它将是你上次给它的 IntegerSort,它仍然有你传递给它的构造函数的 SortDescriptions 列表。所以抓住它:

var intSort = lcv.CustomSort as IntegerSort;

创建一个新的 collection,并使用新列表创建一个新的 IntegerSort

如果 IntegerSort 没有使 SortDescriptions 以 public 属性 的形式提供,请使其成为现实。

或者,如果您想将其保密,请为此目的为 IntegerSort 编写一个新的构造函数:

public IntegerSort(IntegerSort oldSort, SortDecsription add, SortDecsription remove = null)
{
    //  Put the new collection together
}

这样使用:

lcv.CustomSort = new IntegerSort(lcv.CustomSort as IntegerSort, sortedColumnDescription);