Несколько моделей, использующих одну модель? - PullRequest
1 голос
/ 19 января 2012

У меня есть viewmodel1 и viewmodel2.

Viewmodel1 должен отображать данные из какого-либо списка, содержащегося в модели.Viewmodel2 необходимо ввести данные в список, содержащийся в модели.

Таким образом, и Viewmodel1, и Viewmodel2 должны «знать» о модели.

Как правильно сделать это в MVVM?

Должен ли я создать модель в приложении и дать ссылку на нее viewmodel1 и viewmodel2 или?

Ответы [ 3 ]

2 голосов
/ 19 января 2012

Это прекрасно. Models - это то, на что они похожи: модели данных. Они должны быть фиктивными объектами, которые содержат данные, которые остальная часть приложения может использовать по мере необходимости.

ViewModels - это модели, которые отображают вид. Например, предположим, что у вас есть LoginViewModel и ManageUsersViewModel. Обе модели ViewModel будут работать с объектом данных UserModel, однако они совершенно разные модели ViewModel для совершенно разных вещей.

В большинстве случаев я бы оставил ответственность за загрузку Models до ViewModel. Например, вы обычно не загружаете список пользователей до входа пользователя в систему, поэтому у вас будет доступен объект User. Insetad, ваш LoginViewModel будет делать свой собственный вызов базы данных, чтобы получить модель User входа пользователя, в то время как ManagerUsersViewModel будет делать свой собственный вызов базы данных, чтобы получить список пользователей, которые могут быть изменены.

2 голосов
/ 19 января 2012

Мне кажется полезным, если я считаю ViewModel моделью, переведенной только для View.

У вас есть несколько вариантов:

  • Создайте контроллер , который устанавливает ViewModel. Обычно это хороший выбор, если ViewModel нужна информация из более чем одного места. Вы можете либо дать ViewModel ссылку на всю необходимую ему информацию, либо сделать его «Обычным старым .NET-объектом» (PONO) и настроить контроллер для вас.

  • Просто передайте ссылку на ViewModel, как вы предлагаете. Полезно, если не требуется взаимодействие между различными классами

  • Подключите EventAggregator , который можно использовать для публикации уведомления при изменении моделей, и передайте Репозиторий в ViewModels, чтобы каждая из них могла перейти и Получить / сохранить модель, когда им нужно.

Мне действительно нравится последний шаблон, так как он легко масштабируется, если вам нужно больше презентаторов или контроллеров с доступом к таким моделям. Это также позволяет вам внедрить репозиторий, что означает, что вы можете легче перейти к хорошей RESTful сервис-ориентированной архитектуре позже.

Если вы не делали много инъекций зависимостей, пожалуйста, подумайте об этом через конструктор. Это поможет вам избежать ситуаций, когда кто-то пытается использовать ваши ViewModels до того, как они будут готовы, и позволяет ViewModel делать свою собственную работу. Возможно, вы захотите взглянуть на такие фреймворки, как Unity или Castle Windsor , которые могут помочь вам в этом типе проводки, но это действительно только для крупных корпоративных проектов (и даже не для всех) ).

0 голосов
/ 19 января 2012

Вы, должно быть, думаете неправильно ... в MVVM ваша модель содержится в ViewModels вплоть до представлений. Допустим, если существует ObservableCollection, тогда в вашем Viewmodel будет свойство для этого, и вы должны инициализировать эту коллекцию в конструкторе / некотором методе ViewModel .. обе модели представления будут инициализировать ProductTypes следующим образом. По моему мнению, вы должны попробовать создать Classed For Model, ViewModel, Repository и использовать в нем IoC ..

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

http://blog.lab49.com/archives/2650

Если упомянутый вами Список никогда не изменится, попробуйте создать для этого одноэлементную ViewModel и ссылаться на эту модель в других моделях представления.

Привет.

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