Вкладки MVVM Джоша Смита не выбираются

У меня есть приложение MVVM, использующее вкладки, как в примере Джоша Смита. Каждый TabItem (View) представляет отдельную ViewModel.

В некоторых представлениях есть DataGrids, привязанные к ObservableCollections. Пока все работает нормально. Но когда я начинаю редактировать сетку данных, например набрав в ячейку и прежде чем нажать «Enter», чтобы отправить изменения, переключиться на другую вкладку, я действительно не могу вернуться на предыдущую вкладку. Содержимое вкладки изменяется, но элемент вкладки остается невыделенным. Думаю, мне каким-то образом нужно остановить режим редактирования таблицы данных, но как мне это сделать в приложении MVVM? Для ICollectionViewSource я знаю, что могу сделать это так

  IEditableCollectionView list = (ListCollectionView)this.ItemsView;
  if (list.IsEditingItem) list.CommitEdit();
  if (list.IsAddingNew) list.CommitNew();

но я не могу этого сделать для ObservableCollection. Должен ли я изменить привязку к представлению наблюдаемой коллекции или есть другой способ?


person tabina    schedule 07.08.2012    source источник
comment
Сможете ли вы создать небольшой образец кода, демонстрирующий проблему, в новом проекте?   -  person Rachel    schedule 07.08.2012


Ответы (1)


Для автоматического выхода из режима редактирования сетки взгляните на этот вопрос SO: WPF DataGrid - Как автоматически выйти из режима редактирования?

Я также предлагаю взглянуть на интерфейс IEditableObject для классов модели, которые необходимо редактировать в сетке. Это дает вам единообразный способ реализации добавления данных и редактирования их для изменений (или отката изменений) данных объекта.

IEditableObject требует, чтобы вы реализовали следующие методы:

BeginEdit()
CancelEdit()
EndEdit()

DataGrid уже изначально разработан для работы с IEditableObject объектами.

Доктор WPF написал здесь замечательную статью об интерфейсе: ItemsControl: 'E' для редактируемой коллекции, и в этой статье MSDN есть образец кода для использования IEditableObjects с dataGrid: Как: реализовать проверку с помощью элемента управления DataGrid

person Jens H    schedule 09.08.2012