проектирование модели в MVVM и WPF и государственное управление - PullRequest
2 голосов
/ 14 апреля 2011

В моем приложении WPF я использую MVVM.Я читаю из файла XML, десериализую его в объектную модель и сохраняю в памяти.

Файл XML-> BusinessObjectModel (Model) -> ViewModel

Всякий раз, когда модели представления требуется модель, я предоставляю ее из памяти. Моя проблема заключается в том, что я использую элементы модели в представленияхобновляет модель в памяти (очевидно!).Я не хочу этого делать, я хочу, чтобы модель обновлялась только тогда, когда пользователь нажимает OK в представлении (или диалоговом окне).Как это обычно достигается?Должен ли я предоставить viewmodel клон модели, а не исходную ссылку?

1 Ответ

4 голосов
/ 14 апреля 2011

Редактирование клона объекта модели решит проблему, как вы предложили.

Другой подход заключается в том, чтобы привязки свойств использовали UpdateSourceTrigger из Explicit.После нажатия кнопки «Сохранить» вы будете программно вызывать UpdateSource для каждого выражения привязки.Это требует некоторого дополнительного кода, который будет принадлежать к коду сзади View, так как это код, который управляет элементами пользовательского интерфейса.

Также рассмотрите возможность иметь свойство на вашей виртуальной машине для каждого свойства, представленного в View, где поле поддержкисвойства VM - это , а не соответствующего свойства обернутого объекта Model.Когда пользователь нажимает кнопку Сохранить, вы можете назначить каждое свойство виртуальной машины объекту модели.Естественно, элементы управления в представлении будут привязаны к свойствам виртуальной машины, а не к свойствам модели.Это фактически похоже на клон без дополнительной поддержки клонирования на уровне модели.

Я не утверждаю, что какой-либо из этих вариантов лучше или хуже.Все зависит от контекста, в котором они используются.

...