发布排序datagrid

时间:2012-03-05 01:16:02

标签: wpf xaml wpfdatagrid

我用了很长时间在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中的排序。这是一个错误吗?

干杯, 迈克尔

1 个答案:

答案 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);