WPF - обработка событий из пользовательского элемента управления в View Model - PullRequest
15 голосов
/ 28 мая 2010

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

1 Ответ

12 голосов
/ 28 мая 2010

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

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

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

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

Вы также можете рассмотреть Поведение прикрепленной команды , дополнительную информацию об этом и реализации можно найти здесь:

Запуск события двойного щелчка из элемента WPF ListView с использованием MVVM

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