我用了很长时间在WPF中进行排序的技术是创建一个CollectionViewSource并指定SortDescriptions,例如
<Window.Resources>
<CollectionViewSource x:Key="testView">
<CollectionViewSource.SortDescriptions>
<cm:SortDescription PropertyName="FirstName" Direction="Descending"></cm:SortDescription>
<cm:SortDescription PropertyName="FamilyName"></cm:SortDescription>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
除了使用DataGrid之外,这对我所抛出的所有内容都非常有效。它似乎第一次工作正常但如果我更改数据然后网格杀死排序。它甚至会杀死使用相同CollectionViewSource的其他控件。我在这里创建了一个示例项目
http://www.mikesdriveway.com/misc/GridSortIssue.zip
要测试此问题,请运行项目并单击“刷新数据”按钮。请注意,项目的顺序会发生变化。这只发生一次,再次测试停止并再次运行项目。现在从DataGrid中删除ItemsSource并再次运行该项目。这次单击“刷新数据”按钮时没有任何反应,这意味着排序保持不变。不知何故,网格正在杀死CollectionViewSource中的排序。这是一个错误吗?
干杯, 迈克尔
答案 0 :(得分:2)
这是相当奇怪的,从我可以告诉SortDescription
基础View
被清除时源被更改,所以如果CVS的SortDescriptions
没有被重新 - 应用了没有排序。
一种解决方法是“重置”SortDescriptions
:
var cvs = (CollectionViewSource)Resources["testView"];
var descriptions = cvs.SortDescriptions.ToArray();
cvs.SortDescriptions.Clear();
foreach (var descripton in descriptions) cvs.SortDescriptions.Add(descripton);