使用 CustomSort 时重置 SortDescriptionCollection

SortDescriptionCollection is reset when using CustomSort

这是我第一次(字面上)使用 C# 和 WPF。所以我希望我遇到的问题是我不知道的基本和简单的问题。

我的 ListCollectionView 有什么方法可以在 CustomSort 之后保留其 SortDescriptions 吗?

这是具有我需要的行为的原始代码:

private void OnSorting(object sender, DataGridSortingEventArgs e)
{
    e.Handled = true;
    DataGridColumn column = e.Column;
    var direction = (column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
    column.SortDirection = direction;
    var sortedColumnDescription = new SortDescription(e.Column.SortMemberPath, direction);

    var lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(((DataGrid)sender).ItemsSource);
    Console.WriteLine("Before sorting, SortDescriptions count is: " + lcv.SortDescriptions.Count);

    if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
    {
        lcv.SortDescriptions.Add(sortedColumnDescription);
    }
    else
    {
        lcv.SortDescriptions.Clear();
        lcv.SortDescriptions.Add(sortedColumnDescription);
    }
    Console.WriteLine("After sorting, SortDescription count is: " + lcv.SortDescriptions.Count);
}

基本上,在这种情况下,如果用户按下 shift 键进行多列排序,它会将 sortedColumnDescription 添加到 SortDescriptions,如果我检查 SortDescriptions 计数,它将等于我正在排序的列数上。

输出结果如下:

// Single click a column
Before sorting, SortDescriptions count is: 0
After sorting, SortDescription count is: 1
// Shift + click columns from this point on
Before sorting, SortDescriptions count is: 1
After sorting, SortDescription count is: 2
Before sorting, SortDescriptions count is: 2
After sorting, SortDescription count is: 3

但是我需要实现 CustomSort,所以我所做的只是在 else 语句之后添加一行:

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

我的目标是将 SortDescriptions 集合传递给我的 CustomSort,它会弄清楚如何处理这一切。但出于某种原因,现在仅这一行就给出了以下输出:

// Single click a column
Before sorting, SortDescriptions count is: 0
After sorting, SortDescription count is: 0
// Shift + click columns from this point on
Before sorting, SortDescriptions count is: 0
After sorting, SortDescription count is: 0
Before sorting, SortDescriptions count is: 0
After sorting, SortDescription count is: 0

我尝试存储 SortDescriptions,然后在 CustomSort 之后重新添加它们,但这会触发 listcollectionview 上的默认排序行为,这会破坏我已经完成的自定义排序。

谢谢

SortDescriptionCollection is reset when using CustomSort

这是预期的行为。设置 CustomSort 属性 会清除先前设置的 SortDescriptions 值。文档对此非常清楚:https://msdn.microsoft.com/en-us/library/system.windows.data.listcollectionview.customsort(v=vs.110).aspx.

Is there any way for my ListCollectionView to preserve its SortDescriptions after the CustomSort?

不,您使用 自定义排序器或使用 SortDescriptions 的内置排序器。你不能把它们结合起来。