多列 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);
作为 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);