MVVM - Контроль и Представления - PullRequest
4 голосов
/ 24 июня 2009

Я делал прототип в WPF без использования MVVM. Он достиг такого размера, что я реорганизую его для использования MVVM.

Когда я запустил проект, я запрыгнул и создал UserControls для многих вещей.

Я сейчас разбиваю вещи в Views и ViewModels. Но я заканчиваю представлениями, которые содержат пользовательские элементы управления; UserControls имеют привязки к тем объектам, которые сейчас являются объектами в модели.

Итак, понятие UserControls теперь не работает в MVVM? Я имею в виду, что в прошлом (WinForms, ASP.NET и т. Д.) У вас был проект под названием «Элементы управления», и он использовался повторно. Является ли 'View' в MVVM прямой заменой типичного UserControl?

Ответы [ 3 ]

6 голосов
/ 24 июня 2009

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

То, как я делаю MVVM, пропускает посредника и определяет представления как DataTemplate с. Тогда вам нужно только вставить вашу виртуальную машину в визуальное дерево WPF где-нибудь, и WPF отобразит ее с вашим DataTemplate Например:

<ContentControl Content="{Binding SomeViewModel}"/>

<ItemsControl ItemsSource="{Binding SomeViewModels}"/>
2 голосов
/ 24 июня 2009

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

1 голос
/ 24 июня 2009

Мммм ... когда у меня были пользовательские элементы управления, я просто передавал DataContext из представления в пользовательский элемент управления (субинформация, необходимая для этого элемента управления). Но это правда, что иногда трудно установить ViewModel в Views, UserControls, ...

...