1

这是我第一次(字面上)使用 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 上的默认排序行为,这会破坏我所做的自定义排序。

谢谢

4

1 回答 1

2

使用 CustomSort 时重置 SortDescriptionCollection

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

有什么办法让我在之后ListCollectionView保存它?SortDescriptionsCustomSort

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

于 2017-11-28T15:17:31.707 回答