Платформа объекта 4.0 Привязки данных с сортировкой не работающий

Я хочу сделать что-то, что я думал, будет очень просто. Я хочу связать сгенерированную Платформу Объекта EntityCollection с WPF DataGrid. Я также хочу, чтобы эта сетка была поддающейся сортировке.

Я попробовал все виды вещей заставить это произойти, включая использование CollectionViewSource. Однако ничто, кажется, не работает. Используя нормальный CollectionViewSource вокруг EntityCollection дает мне:

'System.Windows.Data.BindingListCollectionView' view does not support sorting.

Хорошо... странный. Я думал бы, что это будет работать. Затем на CollectionViewSource, я пытаюсь установить:

 CollectionViewType="ListCollectionView"

Большой, сортируя теперь работает. Но ожидайте, я не могу добавить или удалить объекты с помощью сетки теперь, по-видимому, потому что ListCollectionView не поддерживает это с контекстом платформы объекта.

Так, я предполагаю, что должен получить события, выходящие из datagrid, чтобы добавить или удалить объекты вручную из моего контекста. Теперь я не могу найти, что событие получает для обнаружения добавления...!

Почему это настолько трудно? Это должно быть стандартным "демонстрационным" случаем, который Microsoft должна была разработать на основе.

Какие-либо идеи?

6
задан Mike Gates 23 April 2010 в 22:59
поделиться

1 ответ

BindingListCollectionView напрямую не проблема. См. представление «System.Windows.Data.BindingListCollectionView» не поддерживает сортировку в Microsoft Connect, чтобы узнать, почему оно не поддерживает сортировку.

С другой стороны, ListCollectionView поддерживает сортировку, очевидно, с использованием другой техники.

Я также пробовал следующий код, и он отлично сработал. Я в основном реализовал ваш XAML из другого сообщения в коде.

 DatabaseContext.ObjectStateManager.ObjectStateManagerChanged += (o, args) => Debug.WriteLine(args.Element.ToString());

 var collectionViewSource = new CollectionViewSource();
 ((ISupportInitialize)collectionViewSource).BeginInit();
 collectionViewSource.CollectionViewType = typeof (ListCollectionView);
 collectionViewSource.Source = ((IListSource) DatabaseContext.Survey).GetList();
 collectionViewSource.SortDescriptions.Add(new SortDescription {PropertyName = "Name"});
 ((ISupportInitialize)collectionViewSource).EndInit();

 var editableCollectionView = (IEditableCollectionView)collectionViewSource.View;
 var survey = editableCollectionView.AddNew();

 // Before this point ObjectStateManager event has occurred and Debug Output is written to.

 editableCollectionView.CommitNew();
 DatabaseContext.SaveChanges(); // THIS WORKS TOO!

Мой DatabaseContext.Survey - это ObjectQuery . Вы показываете ObjectQuery или запрос Linq-to-EF? Первое, очевидно, работает для меня. В последнем я вижу проблему. Это не должно работать.

2
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: