2009-06-24 4 views
4

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

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

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

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

ответ

6

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

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

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

<ItemsControl ItemsSource="{Binding SomeViewModels}"/> 
+0

Это именно то, что я делаю Kent, но нет причин, по которым вы не можете обернуть UserControl в DataTemplate и позволить привязке делать свою вещь, не так ли? –

1

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

2

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