В MVVM может быть только один вид для каждой модели вида? - PullRequest
5 голосов
/ 09 апреля 2011

Как я читаю здесь:

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

Как правило, один на один связь между взглядом и его посмотреть модель.

Это означает, что по замыслу они не справляются с несколькими представлениями?

Ответы [ 5 ]

2 голосов
/ 10 апреля 2011

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

2 голосов
/ 09 апреля 2011

В MVVM у вас есть View (презентация) и ViewModel (логика), которые предназначены для поддержки потребностей презентаций. Вы можете легко иметь несколько представлений для ViewModel, и часто это ожидается, в основном, в случае, когда у вас есть несколько объектов DataTemplate (которые являются представлениями), привязанными к одному типу ViewModel на основе контекста, в котором он используется.

Несмотря на то, что их обычно сопоставляют один к одному, это не ограничение , а соглашение , и в шаблоне MVVM нет "конструктивного ограничения".

2 голосов
/ 09 апреля 2011

Я думаю, что это обычно имеет место на практике.Тем не менее, красота разделения представления на View и ViewModel означает, что вы можете легко создать много разных видов, каждый из которых в основном показывает одни и те же данные из модели, все совместно используют один и тот же класс ViewModel (может быть, а может и не один и тот же ).экземпляр ).Например, у меня может быть простой и расширенный просмотр моих данных, записанных в основном в XAML как два совершенно разных UserControl, оба совместно используют одну и ту же ViewModel (класс или, возможно, экземпляр).Без использования MVVM было бы сложнее обойтись без дублирования кода.

1 голос
/ 09 апреля 2011

Правильно.Как правило, модель вида разработана специально для одного вида.У него нет никаких знаний о конкретных элементах управления, используемых в представлении, но у него есть структурные и функциональные знания.Наличие нескольких представлений и одной модели представлений часто приводило бы к тому, что класс модели представлений нарушал принцип единственной ответственности.

Хотя иногда имеет смысл иметь несколько представлений и одну модель представлений.Например, базовая и расширенная версия одного и того же представления.В базовой версии вы просто скрываете некоторые части или представляете информацию более простым способом с упрощенной функциональностью.В этом случае абсолютно нормально иметь одну модель представления для этих двух представлений, потому что в противном случае вам пришлось бы дублировать большую часть кода модели представления.

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

0 голосов
/ 24 февраля 2017

Я фактически использовал тот факт, что это отношение один к одному не навязывается в проекте.

У нас были оповещения vm, и мы хотели показать их в списке на одном из наших представлений, а затем всплыть уведомление, когда появляется новый сигнал тревоги, и сделать это на главном экране. Установив контекст данных всплывающего элемента управления для сигналов тревоги vm, мы могли бы легко реализовать эту функцию.

...