MVVM / User Controls & View = ViewModel соглашение - PullRequest
4 голосов
/ 24 февраля 2011

Лоран из MVVM Легкая слава познакомила меня с MVVM, и соглашение об одном представлении имеет одну модель представления.Так каково эмпирическое правило для пользовательских элементов управления?Одна ViewModel для каждого пользовательского элемента управления?При создании представления, использующего более одного пользовательского элемента управления, вы создаете другую модель представления для агрегирования моделей представления пользовательского элемента управления?

Заранее спасибо за ввод.

Ричард

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011

В моих проектах MVVM я обычно делал то, что вы предлагаете: одну ViewModel на UserControl с другой ViewModel, которая объединяет все это вместе.

Эта агрегирующая ViewModel часто будет ViewModel для окна, а не другого UserControl- хотя это не является необходимым и может быть скорее результатом моих предпочтений и истории, а также того факта, что я в основном работаю в WPF.

Единственное место, где у меня нет отдельной ViewModel для UserControl, этогде я создаю очень специфические многократно используемые пользовательские элементы управления - такие как кнопки с определенными визуальными эффектами или пользовательские ползунки.

Это отражено в структуре моего проекта - у меня есть две стандартные папки для пользовательских элементов управления (которые не имеют ViewModels) и представленийкоторые являются либо Windows, либо UserControls, и которые всегда имеют ViewModels.

2 голосов
/ 24 февраля 2011

Одна ViewModel для каждого пользовательского элемента управления?

Да, в общем.UserControl, как правило, представляет собой не что иное, как другое представление.Обычно это означает, что ViewModel для UserControl объединяется с «родительской» виртуальной машиной, объединяющей его (для сопоставления с View, объединяющим данные).

Однако существуют исключения: если UserControl действительно действует как ничто иное, какПользовательский контроль, не привязанный к чему-то конкретному бизнесу, это может быть «чистый взгляд».В этом случае вы можете вообще не захотеть иметь виртуальную машину для этого элемента управления, так как это 100% просмотр.

...