【问题标题】:Persist sorting from DataGrid to ItemsSource collection坚持从 DataGrid 到 ItemsSource 集合的排序
【发布时间】:2012-02-12 08:42:40
【问题描述】:

我有一个DataGrid,我正在尝试以最直接的方式进行排序:单击每列的标题。

这在 View 上效果很好(在 MVVM 上下文中),但我也想对底层 ViewModel 集合(ObservableCollection)进行排序。关于如何实现源代码收集有什么建议吗?

【问题讨论】:

  • 您是否愿意完全放弃 DataGrid 排序并改用您的基础集合排序?在这样做之前我会三思而后行。
  • 这是一个类,专门设计用于将实际数据与其呈现方式分开。 msdn.microsoft.com/en-us/library/…
  • 不,我很满意它在视图上实现的排序(即 DataGrid 的项目)。我也需要相同的排序来传播到 ItemsSource 集合。
  • 更多的是关于如何捕获“SortingChangedEvent”的问题 - 因为其余的对于 Linq OrderBy/OrderByDescending 调用非常简单。我对吗?网格不触及底层集合的原因之一是它可能根本不知道如何对其进行排序:) 所以它采用粗略的方式对其项目进行排序。
  • 你可能想看看这个:stackoverflow.com/questions/7333447/…

标签: wpf sorting mvvm datagrid wpfdatagrid


【解决方案1】:

将网格绑定到ListCollectionView,初始化为ObservableCollection。网格将使用您预先创建的ICollectionView,而不是根据您的ObservableCollection<T>(这是默认行为)创建自己的ICollectionView,并将任何排序功能/谓词应用于您的实例。

作为一个额外的好处,只要您从 ViewModel 调用 MyListCollectionView.Refresh(),ListCollectionView 的排序/过滤将反映在您的网格中。

完成此操作后,遍历 ListCollectionView 的 Items 集合将准确反映网格的当前过滤器/排序状态。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2012-01-01
    • 1970-01-01
    • 2018-07-16
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2013-05-13
    相关资源
    最近更新 更多