MVVM Modelview для просмотра - PullRequest
3 голосов
/ 10 ноября 2010

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

Спасибо.

Ответы [ 3 ]

6 голосов
/ 10 ноября 2010

ViewModel не должен создавать какие-либо элементы UIE напрямую, потому что ViewModel не должен зависеть от View. ViewModel предоставляет данные, с которыми может связываться представление (то есть элементы UIE).

Если ваш вопрос направлен на то, как загрузить View, есть два подхода: View-first и ViewModel-first. В первом случае вы сначала создаете представление, а затем создаете и привязываете его к модели представления. В последнем случае вы заставляете ViewModel создавать представление (через интерфейсы). Подробнее об этом здесь .

Если ваш вопрос направлен на составление представления UIElements, это делается с помощью привязки данных и использования DataTemplates и ControlTemplates.

2 голосов
/ 10 ноября 2010

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

И, строго говоря, ViewModel не связывается с View, нет ссылки на View в ViewModel, а View считывает данные из ViewModel и выполняет команды на ViewModel.

0 голосов
/ 12 апреля 2012

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

Вы можете поместить объект-контейнер в представление, а затем в modelView создать UIElements и привязать эту коллекцию UIElement к свойству содержимого контейнера. Но я думаю, что это не очень хорошая практика. Этот подход нарушает разделение моделей и представлений. Поэтому вам нужно избегать динамического создания компонентов.

Подход MVVM немного отличается. Иногда заставляют нас использовать хитрости. Т.е. вместо использования свойства MemberPath в ListBox вы определяете ItemTemplate и помещаете элементы ButtonBase в шаблон для поддержки Commanding! Или вы расширяете ListBox и команду поддержки.

Мое предложение вместо создания динамического объекта. Используйте DataTemplates и измените связанные элементы в ModelView, тогда представление будет автоматически создано для вас. Для сложных senario это может быть сложно. Мы делаем все это ради сохранения структуры MVVM.

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