Операция отмены привязки данных WPF - PullRequest
0 голосов
/ 28 марта 2011

У меня есть некоторые элементы управления, которые привязаны к отдельным объектам домена.Я должен реализовать некоторые базовые операции обновления базы данных с помощью этих объектов.Я использую привязку команды MVVM для обновления базы данных.Проблема в том, что кнопка «Отмена» в основном перезагружает исходные значения.Я временно сделал так, чтобы он перезагружал объекты из базы данных, но скоро должен его изменить.

Глубокое копирование и синхронизация объектов вручную не работали, поскольку объекты не позволяют легко клонировать.

Установка UpdateSourceTrigger на Explicit of Binding и вызов UpdateSource вручную, кажется, лучшее решение, но не смог найти способ его реализовать, так как у меня нет прямого доступа к элементам управления представления из модели представления (или команды)

Есть идеи?

1 Ответ

0 голосов
/ 28 марта 2011

Я помню, как использовал статью , когда боролся с UpdateSourceTrigger Explicit.Позже у меня возникла та же проблема (мне нужен был доступ к представлению Controls).Именно тогда я обнаружил, что модель представления - это не то, что поддерживает состояние представления WPF, а способ представления данных, и в этом случае ваши данные представляют собой некоторые объекты, гидратированные из базы данных.

Iбыло бы что-то вроде этого:

[Модель представления WPF -> Модель представления сущности] -> Перевод сущности ВМ в сущность -> База данных.

Вместо этого в вашей ViewModel:

public ObservableCollection<MyEntity> MyEntities

Имейте это:

public ObservableCollection<MyEntityViewModel> MyEntities

Где MyEntityViewModel - VM моего Entity

Позвольте мне объяснитьнемного больше: модель представления WPF должна представлять данные, завернутые в виртуальную машину.Это для целей презентации.Что произойдет, если у вас довольно сложный демографический граф объектов, но вам нужно только отобразить имя, дату рождения и Quantum ?Намного проще создать объект модели представления, чтобы обернуть эти три свойства, чем перемещаться по графу объекта.Вот почему существуют такие инструменты, как automapper .

В чем выгода всего этого?

  • Вам не нужно подделывать граф объектов для проведения тестов

  • Вы не привязываете свои сущности к ViewModel.Если вы отменяете, вам не нужно делать повторное получение или что-то в этом роде.вы не трогаете все, кроме случаев, когда проверка завершается успешно.

Конечно, это может не подходить для всех сценариев, и, возможно, вы можете придумать что-то промежуточное.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...