2010-08-25 106 views
2

我正在使用MVVM方法。DataGrid對ItemsSource的排序保留更改

我有一個ViewModel和視圖叫AllSomethingViewModel和AllSomethingView。視圖模型包含SomethingViewModel和SelectedViewModel的列表。該視圖包含綁定到AllSomethingViewModel的SelectedVM屬性的usercontol和一個允許我選擇虛擬機的列表框控件。基本上,當我選擇一個新的虛擬機時,usercontrol的DataContext會發生變化,所以與SomethingViewModel相關的視圖會隨着新信息而更新。

SomethingViewModel包含一個名爲ObservableCollection(DataPoints)數據的對象列表。

我有一個DataGrid綁定到數據和列定義綁定到數據的成員。這工作正常。我可以更改視圖和這個數據網格更新,一切都很好。

我遇到的問題是,我想要任何排序應用於數據網格當datacontext更改時保留。

在與SomethingViewModel相關聯的視圖上,我可以訂閱DataContextChanged事件,但我不確定要從那裏執行排序以應用什麼。

例如。我有2個SomethingViewModels。所以在我的列表中有2個選項。當我選擇第一個時,我使用我的數據獲取我的數據網格。在數據網格中,我決定按照DateCreated升序排序。然後,我去我的第二個虛擬機,datacontext更改,以便網格中的數據更新,但不再排序!

回答

1

如果您的排序是由DataGrid完成的,那麼它存儲在DataGrid用來顯示其數據的ICollectionView中。

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

有一個示例,在代碼here中設置排序。希望這足以讓你朝着正確的方向前進

相關問題