У меня есть представление, содержащее ListView
и кнопку «Редактировать». ItemSource
ListView связан со свойством ObservableCollection<Account>
в базовой модели представления. Его свойство SelectedItem
также связано с моделью представления.
Когда нажимается кнопка редактирования, существующая модель вида запускает пару редактирования / модель представления («экран редактирования»), позволяя пользователю редактировать выбранный в данный момент Account
. Account
для редактирования определяется свойством SelectedItem
модели основного вида.
Проблема: Любые изменения, сделанные на экране редактирования, немедленно отражаются на ListView
на другом экране, даже до нажатия кнопки «Сохранить» на экране редактирования. Почему это происходит, имеет смысл - Account
вызывает события изменения свойств, когда его свойства изменяются, а ListView
обрабатывает эти уведомления.
Желаемый результат: Связанные элементы управления (например, ListView
) должны видеть изменения экрана редактирования только после нажатия «Сохранить».
Возможные решения
- Приостановить уведомление об изменении свойства учетной записи во время редактирования. Недостатки: если обновление привязки данных выполняется вручную во время редактирования экземпляра
Account
, «текущие» изменения появятся на ListView
, даже если эти изменения не вызывали уведомлений. Кроме того, если пользователь запускает второе окно редактирования для того же Account
, он увидит изменения «в процессе». Идея отклонена.
- Попросите модель представления экрана редактирования обернуть экземпляр
Account
в какой-то класс EditingAccount
, который копирует изменения, внесенные в него, обратно в исходный Account
только при вызове Save()
. Должен ли экран редактирования взять на себя ответственность за облегчение этого переноса или он должен попросить об этом сервисный уровень?
Что вы думаете об этих опциях? Как вы решаете эту проблему, когда сталкиваетесь с ней?