这是我第一次(字面意思)使用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上的默认排序行为,这会破坏我已完成的自定义排序。
谢谢
答案 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
的内置排序器。你无法将它们结合起来。