ItemsSource变更时保留DataGrid排序

3

我正在使用MVVM模式。

我有一个名为AllSomethingViewModel和AllSomethingView的ViewModel和View。 ViewModel包含一组SomethingViewModels和SelectedViewModel。 View包含一个绑定到AllSomethingViewModel的SelectedVM属性的用户控件和一个ListBox控件,可以让我选择VM。基本上,当我选择新的VM时,用户控件的DataContext会改变,因此与SomethingViewModel相关联的视图会随着新信息更新。

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

我将DataGrid绑定到数据和定义了绑定到数据成员的列。这很好用。我可以更改视图,这个数据网格将更新,一切都很好。

我遇到的问题是,我希望无论何时对数据网格应用排序,排序都能在数据上下文更改时保持。

在与SomethingViewModel相关联的视图上,我可以订阅DataContextChanged事件,但我不确定如何从那里获取应用排序的方法。

例如,我有2个SomethingViewModels。因此,在我的列表中有2个选项。当我选择第一个选项时,我会得到我的数据网格及其数据。在数据网格中,我决定按DateCreated升序排序。然后我转到我的第二个VM,数据上下文更改,因此网格中的数据已更新,但不再排序!

1个回答

1
如果您的排序是由DataGrid完成的,那么它将存储在ICollectionView中,该ICollectionView用于显示其数据。
ICollectionView view = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource);
// Sorting is found in view.SortDescriptions

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接