【问题标题】:DataGrid Sorting retention on ItemsSource Changed已更改 ItemsSource 上的 DataGrid 排序保留
【发布时间】:2010-08-25 22:04:31
【问题描述】:

我正在使用 MVVM 方法。

我有一个名为 AllSomethingViewModel 和 AllSomethingView 的 ViewModel 和 View。 View Model 包含 SomethingViewModels 列表和 SelectedViewModel。该视图包含一个绑定到 AllSomethingViewModel 的 SelectedVM 属性的用户控件和一个允许我选择 VM 的列表框控件。基本上,当我选择一个新 VM 时,用户控件的 DataContext 会发生变化,因此与 SomethingViewModel 关联的视图会使用新信息进行更新。

SomethingViewModel 包含一个名为 ObservableCollection(DataPoints) 数据的对象列表。

我有一个绑定到数据的 DataGrid,并且定义了绑定到数据成员的列。这工作正常。我可以更改视图,这个数据网格会更新,一切都很好。

我遇到的问题是,当数据上下文发生变化时,我希望对数据网格应用的任何排序都保持不变。

在与 SomethingViewModel 关联的视图上,我可以订阅 DataContextChanged 事件,但我不确定要从那里做什么才能应用排序。

例如。我有 2 个SomethingViewModel。所以在我的列表中有两个选项。当我选择第一个时,我得到了我的数据网格和我的数据。在数据网格中,我决定按 DateCreated 升序排序。然后我转到我的第二个虚拟机,数据上下文发生了变化,因此网格中的数据已更新但不再排序!

【问题讨论】:

    标签: wpf mvvm listcollectionview


    【解决方案1】:

    如果您的排序是由 DataGrid 完成的,那么它将存储在 ICollectionView 中,DataGrid 使用它来显示其数据。

    ICollectionView view = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource);
    // Sorting is found in view.SortDescriptions
    

    有一个在代码here 中设置排序的示例。希望这足以让您朝着正确的方向前进

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 2013-05-13
      • 2014-08-17
      • 2014-08-28
      • 2012-02-12
      • 2011-10-26
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多