Я создаю приложение WPF с помощью шаблона MVVM (оба - новые технологии для меня). Я использую пользовательские элементы управления для простых битов допускающей повторное использование функциональности, которая не содержит бизнес-логику и шаблон MVVM для создания прикладной логики. Предположим, что представление содержит мой пользовательский элемент управления, который запускает события, и я хочу добавить обработчик событий к тому событию. Тот обработчик событий должен быть в модели представления представления, потому что это содержит бизнес-логику. Вопрос – представление и модель представления соединены только путем привязки; как я соединяю привязку использования обработчика событий? Это даже возможно (я подозреваю не)? Если не – как я должен обработать события от управления в модели представления? Возможно, я должен использовать команды или INotifyPropertyChanged?
Вообще говоря, это хорошая практика MVVM, чтобы избежать кода в коде позади, как это было бы в случае, если бы вы использовали события в своих пользовательских элементах управления. Поэтому, когда это возможно, используйте INotifyPropertyChanged
и ICommand
.
С учетом сказанного, в зависимости от вашего проекта и от того, насколько вы прагматичны, в некоторых случаях имеет смысл использовать исходный код элемента управления.
Я несколько раз использовал что-то вроде этого:
private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
MyViewModel vm = this.DataContext as MyViewModel;
vm.MethodToExecute(...);
}
Вы также можете рассмотреть Attached Command Behavior , дополнительную информацию об этом и реализации можно найти здесь:
Запуск события двойного щелчка из элемент WPF ListView с использованием MVVM