使用CustomSort时,将重置SortDescriptionCollection

时间:2017-11-28 14:44:37

标签: c# wpf sorting listcollectionview

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

谢谢

1 个答案:

答案 0 :(得分:1)

  

使用CustomSort时重置SortDescriptionCollection

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

  

我的ListCollectionView是否有办法在SortDescriptions之后保留CustomSort

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