как построить пользовательский контроль в стиле MVVM? - PullRequest
2 голосов
/ 04 августа 2011

WPF: как создать пользовательский контроль в стиле MVVM?

В WPF мы можем создавать пользовательские элементы управления, аналогичные Asp.Net или Winform.

В WPF у нас есть шаблон проектирования MVVM, аналогичный MVC.

Но можно ли в WPF создать пользовательский контроль в стиле MVVM?

Я просто не могу получить это - если это пользовательский элемент управления, его можно загрузить на панели инструментов и перетащить на страницу WPF, как это может быть MVVM? Страница WPF - это только «Просмотр», поэтому пользовательский элемент управления также только «Просмотр», но не «ViewModel», верно?

Спасибо за ответы ваших парней. Есть ли хороший простой пример, который я мог бы прочитать через коды, чтобы понять?

Ответы [ 4 ]

3 голосов
/ 04 августа 2011

Обычно я создаю WPF UserControl, ожидая, что он будет использоваться с определенной моделью представления.

Например, у меня могут быть CalendarControl и CalendarViewModel.CalendarControl никогда не ссылается на CalendarViewModel напрямую, однако он ожидает привязки к CalendarViewModel, поэтому в привязках будут указаны свойства CalendarViewModel

В приложении WPF ParentViewModel обычно предоставляет свойствовведите CalendarViewModel, и он отвечает за создание CalendarViewModel.Родительское представление обычно содержит код, который выглядит примерно так:

<Window.Resources>
    <DataTemplate DataType="{x:Type local:CalendarViewModel}">
        <local:CalendarControl />
    </DataTemplate>
</Window.Resources>

... 

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

Альтернативная (при использовании перетаскивания) разметка может выглядеть следующим образом:

<local:CalendarControl DataContext="{Binding CalendarViewModelProperty}" />
1 голос
/ 04 августа 2011

Хорошо спроектированный UserControl должен быть в состоянии использоваться во многих архитектурах, включая MVVM.

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

При проектировании вашего UserControl есть хорошие уроки из MVVM, которым вы можете следовать:четкое понимание модели данных, которую будет использовать UserControl.

Держите логику представления и модель данных в своем дизайне изолированными. Используя WPF, убедитесь, что вы можете легко связать свою модельпользовательский элемент управления.
0 голосов
/ 04 августа 2011

A UserControl может иметь ViewModel, как и любой другой View. Когда вы используете свой UserControl в другом окне, экземпляр ViewModel создается при загрузке UserControl. Но какой MVVM Framework вы используете? Я действительно предлагаю вам использовать один. (как CinchV2)

0 голосов
/ 04 августа 2011

Обычно я использую UserControl Представления для моей страницы сведений наряду с каким-то видом ItemsControl (ListBox / TreeView и т. Д.). Мои элементы управления заполнены объектами, обернутыми в ViewModels. Страница сведений (UserControl) имеет свой datacontext, установленный для свойства выбранного элемента ItemsControl, так что когда элемент выбран, пользовательский элемент управления datacontext передается в виде ViewModel SuchAndSuch.

Есть и другие способы сделать это, все зависит от того, как вы хотите идти. Вы можете скопировать элемент управления в коде и назначить его viewmodel, вы можете установить viewmodel в определении XAML. Все зависит от того, для чего вы хотите его использовать, и от того, как структурировано ваше приложение.

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