2014-12-18 2 views
1

Решение должно быть очень простым и просто пропустить его.Сортировка ObservableCollection для DataGrid корректно работает для первого запуска

У меня есть DataGrid, связанный с ObservableCollection. Этот ObservableCollection должен быть групповым и отсортированным. Я делаю это так:

ListCollectionView collection = new ListCollectionView(myCollection); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group1")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group2")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group3")); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group1", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group2", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group3", System.ComponentModel.ListSortDirection.Ascending)); 
myDataGrid.ItemsSource = collection; 

Однако, если он заново работает, он работает. Так что только в первый раз. Я могу обойти это, сделав это;

ListCollectionView collection = new ListCollectionView(myCollection); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group1")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group2")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group3")); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group1", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group2", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group3", System.ComponentModel.ListSortDirection.Ascending)); 
myDataGrid.ItemsSource = collection; 
collection = new ListCollectionView(myCollection); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group1")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group2")); 
collection.GroupDescriptions.Add(new PropertyGroupDescription("Group3")); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group1", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group2", System.ComponentModel.ListSortDirection.Ascending)); 
collection.SortDescriptions.Add(new System.ComponentModel.SortDescription("Group3", System.ComponentModel.ListSortDirection.Ascending)); 
myDataGrid.ItemsSource = collection; 

Это просто кажется глупым.

ответ

0

Вы можете попробовать:

// consider this: 
// ObservableCollection<...> myCollection = ... 
// then 
var view = CollectionViewSource.GetDefaultView(myCollection); 
view.GroupDescriptions.Add(new PropertyGroupDescription("Group1")); 
view.SortDescriptions.Add(new SortDescription("Group1", ListSortDirection.Ascending)); 
MyDataGrid.ItemsSource = myCollection; 

Ваш источник данных останется прежним, только 'вид' модифицируется.

Ваш код не работает, потому что вы фактически устанавливаете источник данных непосредственно в ListCollectionView, но WPF создает другое представление, которое обертывает коллекцию ListCollectionView. Поэтому вы должны вызвать CollectionViewSource.GetDefaultView, чтобы получить фактически привязанное представление.

Смежные вопросы