DataGrid对ItemsSource的保留排序已更改

时间:2010-08-25 22:04:32

标签: wpf mvvm listcollectionview

我正在使用MVVM方法。

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

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

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

我遇到的问题是,当datacontext更改时,我希望应用于datagrid的任何排序都会持久存在。

在与SomethingViewModel相关联的View上,我可以订阅DataContextChanged事件,但我不确定从那里做什么来获取要应用的排序。

例如。我有2个SomethingViewModels。所以在我的列表中有2个选项。当我选择第一个时,我使用我的数据获取数据网格。在datagrid中,我决定按DateCreated Ascending顺序排序。然后我转到我的第二个VM,datacontext发生了变化,因此网格中的数据会更新,但不再排序!

1 个答案:

答案 0 :(得分:1)

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

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

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