3

我正在使用 MVVM 方法。

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

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

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

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

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

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

4

1 回答 1

1

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

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

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

于 2010-09-07T15:29:37.310 回答