我长期以来在 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 中的排序。这是一个错误吗?
干杯, 迈克尔
最佳答案
据我所知,这相当奇怪 SortDescription
底层证券View
当源更改时会被清除,因此如果 SortDescriptions
的 CVS 不会重新应用,不再进行排序。
一种解决方法是“重置”SortDescriptions
:
var cvs = (CollectionViewSource)Resources["testView"];
var descriptions = cvs.SortDescriptions.ToArray();
cvs.SortDescriptions.Clear();
foreach (var descripton in descriptions) cvs.SortDescriptions.Add(descripton);
关于wpf - 问题排序数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560528/