2011-11-03 2 views
2

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

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

ответ

4

См my answer to your other question о пользовательских элементов управления и просмотра моделей. Вот короткая версия:

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

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

+0

плюс 1, это должен быть правильный ответ –

1

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

При использовании MVVM в WPF/Silverlight общим подходом является установка ViewModel в качестве DataContext соответствующего представления. Таким образом, вы сможете связать собственные свойства зависимостей с свойствами ViewModel с помощью Bindings в 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

Вот как вы это делаете с пользовательским контролем, а не с пользовательским управлением. –

+1

@Xin: Я не заметил пользовательскую точку управления – sll

+0

@Xin: насколько я помню, я использовал пользовательские элементы управления без привязки шаблонов, но напрямую указывая привязки в View.Xaml, например '' поэтому это не должно быть проблемой – sll

0

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

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

Смежные вопросы