2014-09-08 3 views
0

Я работаю над mvvm в C# wpf, я немного разбираюсь в mvvm. Я создаю объект своего класса View в My ViewMode classl.so это нарушение шаблона mvvm? и как ? было бы замечательно, если кто-то объяснит это подробно.Создание объекта класса вида в классе ViewModel в mvvm

+3

«так ли это нарушает шаблон mvvm?» Да. Модель представления не должна знать вид. – Clemens

+0

thanx для комментария, но вы можете объяснить, почему? Я новичок в mvvm –

+3

Как насчет поиска в Интернете? Есть много онлайн-ресурсов. – Clemens

ответ

0

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

A View почти всегда состоит из элементов пользовательского интерфейса, таких как кнопки или текстовые блоки. Viewmodel должен быть связан с такими вещами, как свойства, например UserName, или StartDate, или WarningState. Эти свойства VM затем привязаны (с DataBinding) к свойствам элементов пользовательского интерфейса в представлении ... так что представление имеет зависимость от VM , но не наоборот. Когда виртуальная машина получает данные для заполнения этих свойств, в первую очередь, это модель или для ввода данных, возможно, все они будут пустыми, и приложение будет полагаться на пользователя, вводящего данные в представление.

Возможно, вы захотите связать WarningState с TextBox, например, но в равной степени вы можете связать его с ComboBox. Или вы можете использовать конвертер и привязать его к цвету переднего плана прямоугольника или фоновому цвету элемента пользовательского интерфейса, который используется для чего-то совершенно другого.

Дело в том, что этим вещам не нужно беспокоиться о ВМ: все, о чем он заботится, представляет данные/состояние. Это зависит от того, как он занимается этой информацией (или не имеет с этим отношения). Таким образом, вы можете полностью заменить вид другой версией и не должны изменять что-нибудь в вашей виртуальной машине ... вы успешно отделили свой экран от своей логики.

+0

Точка MVVM является тестируемостью ... поэтому вы хотите отделить свое представление от модели представления. Как только это будет сделано, вы можете выполнить модульное тестирование модели своего вида, не испытывая этого. Трудно получить объяснение MVVM серьезно, когда не упоминается модульное тестирование. – BenjaminPaul

+0

Это определенно ** одна ** точка MVVM да. Я попытался создать простое объяснение, потому что, как отметили клемы, есть множество онлайн-ресурсов, чтобы направить обучение OP. Мой ответ не был полным, но я не думаю, что это означает, что мои очки «трудно воспринимать всерьез». Если вы можете поменять один вид и полностью заменить его совершенно другим видом, и вам не нужно ничего менять о вашей модели или виртуальной машине, тогда вы можете быть очень счастливы, что успешно отделили свои проблемы. Попробуйте сделать это в Winforms (без использования MMVM). – Mashton

Смежные вопросы