Как модель обычно используется объектами ViewModel? - PullRequest
6 голосов
/ 17 января 2011

Допустим, у меня есть программа, которая должна представлять некоторые данные двумя различными способами.Если я хочу сделать это, имея две разные модели ViewModel, похоже, что они должны совместно использовать один и тот же экземпляр объекта Model.Так как же это обычно достигается в MVVM с WPF?

Один из способов, о котором я могу думать, - это то, что конструкторы ViewModel могут взять экземпляр соответствующей Модели, и вся проводка может быть выполнена в обработчике для Приложения.Событие запуска.Я не помню, чтобы это было сделано ни в одном из примеров, которые я видел до сих пор, но я, возможно, просто пропустил это.

Пока что кажется, что в большинстве случаев примеры просто показывают ViewModelsсоздание экземпляров самих классов Model, которые в некоторых случаях могут работать, но не кажутся хорошим решением для моей ситуации, поскольку каждая ViewModel будет создавать свои собственные экземпляры классов Model.Также кажется, что это исключило бы возможность замены Модели на другую, что может быть желательным, как в случае модульного тестирования.Я предполагаю, что инфраструктура внедрения зависимостей или контейнер IoC решит эту проблему, хотя?До сих пор я использовал только ручное внедрение зависимостей.

В другом примере казалось, что View сам создал объекты Model и передал их ViewModels, что тоже не кажется такой хорошей идеей,поскольку представление не должно ничего знать о модели?

Некоторые примеры даже не имеют классов модели, только Views и ViewModels.

Существуют ли более эффективные способы, о которых я не упомянул?

Кроме того, мне следует использовать инфраструктуру внедрения зависимостей или контейнер IoC?Как уже упоминалось, я не использовал его раньше и подумал, что это может быть излишним из-за размера программ, над которыми я сейчас работаю.На самом деле, не очень внимательно изучив, я могу ошибаться.

Ответы [ 3 ]

2 голосов
/ 17 января 2011

Общий подход заключается в передаче модели в конструктор модели представления.Возможно, приведенные вами примеры не показывают это для простоты.Поэтому, если у вас есть две модели представления, которые работают с одними и теми же данными (моделью), просто используйте один и тот же экземпляр модели в обеих.

Что касается внедрения зависимостей и контейнеров IoC, то, как вы сказали, для небольших проектов это излишне, но если ваш проект станет большим, это может принести вам большую выгоду.

0 голосов
/ 14 ноября 2015

Вы можете установить модель для всего Приложения как одноэлементный / статический класс.Тогда тот же экземпляр используется по умолчанию.

0 голосов
/ 17 января 2011

Вы должны поделиться моделью: если вы не хотите, чтобы ваши данные в пользовательском интерфейсе обновлялись через INotifyPropertyChanged - это одна из основных идей MVVM - вам следует поделиться моделью (по крайней мере, соответствующим портомопределенная ViewModel) между ViewModels.

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