使用 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
的内置排序器。你不能把它们结合起来。
这是我第一次(字面上)使用 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 itsSortDescriptions
after theCustomSort
?
不,您使用 自定义排序器或使用 SortDescriptions
的内置排序器。你不能把它们结合起来。