Пользовательский элемент управления, View Model и свойства зависимостей - PullRequest
2 голосов
/ 04 ноября 2011

Я создаю пользовательский элемент управления, и, поскольку мне нужно много связывать внутри стиля / шаблона, имеет смысл использовать MVVM.Где тогда объявлять свойства зависимостей?

Они остаются в классе управления?Как мне связать их с ВМ?

Ответы [ 3 ]

4 голосов
/ 04 ноября 2011

См. мой ответ на другой ваш вопрос о пользовательских элементах управления и просмотра моделей. Вот короткая версия:

  1. У пользовательских элементов управления не должно быть моделей просмотра.
  2. Не устанавливайте контекст данных для своего собственного элемента управления. Это зарезервировано для потребителя.
  3. Все ваши свойства зависимостей должны быть объявлены в вашем файле MyCustomControl.cs.
  4. Используйте TemplateBinding в вашем genric.xaml, поскольку он более эффективен, чем Binding.

Другими словами, какова модель вида для Границы или Кнопки? Ответ: у них их нет, потому что они просто контролируют. У UserControls есть модели представлений, но элементы управления просто представляют и взаимодействуют с данными, которые вы им предоставляете (где? В вашем UserControl). Разработка пользовательского элемента управления, вероятно, самая трудная вещь для опытного разработчика MVVM: ваш рефлекс состоит в том, чтобы создать модель представления, но этот рефлекс, к сожалению, неверен. Я знаю, потому что я сделал эту ошибку сам.

1 голос
/ 04 ноября 2011

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

При использовании MVVM в WPF / Silverlight общий подход заключается в установке ViewModel в качестве DataContext соответствующего представления.Таким образом, вы сможете связать пользовательские свойства зависимостей со свойствами ViewModel, используя привязки в XAML.

Предположим, вы уже установили ViewMosel в DataContext представления:

var view = new UserView 
               { 
                 DataContext = new UserViewModel { Name = "Custom Name" } 
               };

public class UserViewModel
{
   string Name { get; set; }
}

UserView.xaml:

<TextBlock Text="{Binding Name}" />
0 голосов
/ 04 ноября 2011

При создании пользовательского элемента управления сам элемент управления является моделью представления.Объявите свойства зависимости для него, чтобы показать привязки, которые могут использовать пользователи пользовательского элемента управления.Например, если у вас есть элемент управления временной шкалой, у вас могут быть такие свойства, как StartDate и EndDate для элемента управления, представленные как свойства зависимостей.Шаблон по умолчанию для элементов управления будет привязывать шаблоны к свойствам зависимостей.Потребитель вашего элемента управления может затем иметь модель представления временной шкалы проекта, которую он привязывает к свойствам элемента управления.

Основная цель пользовательского элемента управления состоит в том, чтобы обеспечить поведение и внешний вид по умолчанию для этого поведения, котороелегко переопределить (предоставив новый шаблон).Надеюсь, это поможет.

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