wpf - 问题排序数据网格

标签 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 中的排序。这是一个错误吗?

干杯, 迈克尔

最佳答案

据我所知,这相当奇怪 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/

相关文章:

c# - Caliburn.Micro 禁用 ItemsControl 的默认点击事件

WPF 控件默认大小

c# - Visual Studio 2017 xaml 设计器不可用

windows-phone-7 - wp7 pivotcontrol设置标题为空

wpf - 将 EPS 转换为 Xaml

c# - Datagrid 没有双击编辑列

wpf - 在代码隐藏中创 build 计数据上下文

c# - 单击搜索按钮触发验证

c# - 带有隐藏输入的 HttpWebRequest 登录

wcf - 使用 MVVM 模式将 WPF 网格绑定(bind)到 WCF 服务