Редактирование выбранного элемента ObservableCollection без привязанных элементов управления Просмотр изменений до их сохранения - PullRequest
1 голос
/ 21 января 2010

У меня есть представление, содержащее ListView и кнопку «Редактировать». ItemSource ListView связан со свойством ObservableCollection<Account> в базовой модели представления. Его свойство SelectedItem также связано с моделью представления.

Когда нажимается кнопка редактирования, существующая модель вида запускает пару редактирования / модель представления («экран редактирования»), позволяя пользователю редактировать выбранный в данный момент Account. Account для редактирования определяется свойством SelectedItem модели основного вида.

Проблема: Любые изменения, сделанные на экране редактирования, немедленно отражаются на ListView на другом экране, даже до нажатия кнопки «Сохранить» на экране редактирования. Почему это происходит, имеет смысл - Account вызывает события изменения свойств, когда его свойства изменяются, а ListView обрабатывает эти уведомления.

Желаемый результат: Связанные элементы управления (например, ListView) должны видеть изменения экрана редактирования только после нажатия «Сохранить».

Возможные решения

  • Приостановить уведомление об изменении свойства учетной записи во время редактирования. Недостатки: если обновление привязки данных выполняется вручную во время редактирования экземпляра Account, «текущие» изменения появятся на ListView, даже если эти изменения не вызывали уведомлений. Кроме того, если пользователь запускает второе окно редактирования для того же Account, он увидит изменения «в процессе». Идея отклонена.
  • Попросите модель представления экрана редактирования обернуть экземпляр Account в какой-то класс EditingAccount, который копирует изменения, внесенные в него, обратно в исходный Account только при вызове Save(). Должен ли экран редактирования взять на себя ответственность за облегчение этого переноса или он должен попросить об этом сервисный уровень?

Что вы думаете об этих опциях? Как вы решаете эту проблему, когда сталкиваетесь с ней?

1 Ответ

1 голос
/ 21 января 2010

Я бы пошел с какой-то версией второго варианта. По сути, это вариант шаблона MVVM , который считается «правильным» способом создания кода WPF / Silverlight. По сути, у вас должен быть объект ModelView для каждого «экрана» (View), который оборачивает модель и предоставляет модель в формате, специфичном для View, так что он делает именно то, что нужно View, и НИЧЕГО.

...