ViewModel для просмотра или для модели? - PullRequest
11 голосов
/ 23 февраля 2012

В шаблоне MVVM есть только одна ViewModel для View или только одна ViewModel на модель?

Ответы [ 4 ]

23 голосов
/ 23 февраля 2012

Теоретически, отношения

Просмотр n - 1 ViewModel n - 1 Модель

Я знаю, многие меня кусают и бьют, но ... На практике ...

Очень часто в бизнес-приложениях существует уровень доступа к данным (DAL). И очень часто сущности из DAL являются вашими моделями. Иногда вам следует обернуть эти объекты дополнительными классами, чтобы обеспечить расширенную функциональность или, возможно, некоторые дополнительные свойства. Может быть, у вас есть свои собственные модели ...

ViewModels и Views (на практике) обычно имеют отношение 1 к 1. Нечто подобное - каждый экран (или часть экрана) на самом деле является парным View и ViewModel. Я думаю, что обычно это что-то вроде: View - это слой пользовательского интерфейса, а ViewModel - уровень кода. Представление - это просто файл XAML - уровень представления. И (лучшая практика) все остальное должно быть во ViewModel - все процессы получения данных, все команды, все изменяемые поля и т. Д. Таким образом, вы обычно можете тестировать ViewModel (с модульным тестированием). Одна ViewModel может иметь несколько представлений (на практике), обычно, только если у вас есть общие ViewModel, например, для DesktopApplication (WPF), веб-приложения (Silverlight) и Windows Phone. Что-то вроде этого. Но обычно - одна ViewModel - одна View. Если у вас есть несколько видов для одной ViewModel - обычно у вас много проблем с обслуживанием ...

8 голосов
/ 23 февраля 2012

Просмотр n - 1 ViewModel n - 1 Модель

5 голосов
/ 23 февраля 2012

Существует одна модель на модель представления и одна модель на представление, в другом направлении все равно n.

4 голосов
/ 23 февраля 2012

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

Множество видов для одной модели вида:

Например, в компоновке мастер-детали вы можете поместить свои модели представлений в ObservableCollection и представить их в ListBox, в котором вы привязываете отображаемые элементы к свойству Title в ViewModel.ListBox представляет один вид ваших моделей просмотра.Затем ListBox.SelectedItem привязывается к другому представлению, в котором представлены сведения о выбранной модели.

Один просмотр для многих моделей представления:

Начиная с набора моделей представления, которые все совместно используют.общие имена свойств, вы можете представить все модели представления в одном представлении.Например, у вас может быть простая модель представления, состоящая из свойства Title и свойства ModelValue.Во всех моделях представления свойство Title будет строковым, но каждая отдельная модель представления может иметь свой тип данных для свойства ModelValue.StringViewModel будет иметь строку ModelValue, а DoubleViewModel будет иметь двойное ModelValue.Представление различных моделей представлений может совместно использовать одно и то же представление, состоящее из TextBlock для представления заголовка и TextBox для редактирования ModelValue.Это будет работать для любого типа, редактируемого в TextBox.

Смешивая и сопоставляя Views и ViewModels, вы можете получить большое преимущество благодаря чистому разделению Views и ViewModels.

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