2010-05-28 4 views
13

Я создаю приложение WPF с использованием шаблона MVVM (для меня это новые технологии). Я использую пользовательские элементы управления для простых битов многоразовой функциональности, не содержащей бизнес-логики, и шаблона MVVM для создания логики приложения. Предположим, что представление содержит мой пользовательский элемент управления, который запускает события, и я хочу добавить обработчик события к этому событию. Этот обработчик событий должен быть в представлении модели представления, потому что он содержит бизнес-логику. Вопрос заключается в следующем: - представление и модель представления связаны только привязкой; как связать обработчик события с помощью привязки? Возможно ли это (я подозреваю, что нет)? Если нет - как я должен обрабатывать события из элемента управления в модели представления? Может быть, я должен использовать команды или INotifyPropertyChanged?WPF - Обработка событий из пользовательского элемента управления в View Model

ответ

11

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

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

меня в несколько раз использовали что-то вроде этого:

private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    MyViewModel vm = this.DataContext as MyViewModel; 
    vm.MethodToExecute(...); 
} 

Вы могли бы также рассмотреть вопрос о Attached Command Behaviour, больше информации об этом и реализациях найти здесь:

Firing a double click event from a WPF ListView item using MVVM

+0

управление должно быть многоразовым, так что код не будет делать - это привязывает управление к определенной модели представления. Команды ... Наверное, нет - они больше подходят для действий пользователя. Затем INotifyPropertyChanged? Спасибо :) – Vitaly

+0

Трудно сказать для меня, не зная больше деталей. Но я добавил некоторые ссылки на соответствующую информацию – ThomasAndersson

+0

@Vitaly, если вы беспокоитесь о привязке View к явной ViewModel, вы можете обернуть ViewModel в интерфейсе. Я бы посмотрел на «Привязанные командные поведения», которые становятся общепринятой практикой. Кроме того, проверьте MVVMLight или Caliburn в качестве основы для помощи в работе MVVM, это значительно облегчит вам жизнь. – Agies

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