Подтвердить что ты не робот

В MVVM, как лучше всего, чтобы ViewModel отвечал на действия пользователя в представлении?

Я понимаю, что в MVVM:

  • Вид знает о ViewModel
  • ViewModel знает о модели
  • но он не работает вверх, поэтому Model ничего не знает о ViewModel
  • и ViewModel ничего не знает о представлении

Итак, , как ViewModel отвечает на действия, которые пользователь делает в представлении, например. введите что-то в TextBox или переместите ползунок и т.д.

  • Я понимаю, что это делается с помощью RoutedEvents, но почти все примеры RoutedEvent, которые я нахожу, используют CodeBehind в представлении, и это именно то, чего у вас больше нет в MVVM.

  • Итак, это оставляет RoutedCommands, который я нахожу больше примеров в MVVM, но, например, перемещение ползунка действительно не является командой в этом смысле, это событие, поэтому мне интересно, действительно ли это то, что следует использовать.

  • Затем я прочитал совет, например:" В MVVM используйте RoutedEvents как можно меньше и нет RoutedCommands. OK.

  • Таким образом, что листья, например. в WPF Model-View-ViewModel Toolkit 0.1 создайте команду WPF самостоятельно, у вас есть " DelegateCommand", который также выглядит интересным способом.

  • Затем некоторые люди также используют " RelayCommand".

Это много вариантов и путаницы для того, чтобы делать что-то такое для разработки приложений.

Как лучше всего сделать в MVVM то, что мы делали в течение последних 10 лет с помощью кода Behind:

  • кнопка создания
  • кнопка двойного щелчка
  • написать код обработки
4b9b3361

Ответ 1

Просто, чтобы быть ясным, когда люди упоминают DelegateCommand и RelayCommand, они действительно говорят об одном и том же: реализация ICommand, которая позволяет вам передать делегат, Вы можете использовать их взаимозаменяемо.

Насколько мне известно, привязка вашего представления (XAML) к DelegateCommands в ViewModel - лучший способ реализовать MVVM.

Я стараюсь держаться подальше от RoutedEvents и кода по возможности.

Ответ 2

Для кнопок и других триггеров я использую интерфейс ICommand, предоставляемый WPF, аналогично тому, с которым вы связались. (на самом деле я использую команду Relay как определенную здесь)

Когда вы меняете значение (перемещение ползунка, ввод текста в текстовое поле), используйте привязки и поведение обработчика, когда установлено свойство в ViewModel.

Как правило, я обнаружил, что в приложении MVVM очень мало оснований использовать RoutedEvents, но они являются приятным знакомым комфортным одеялом, когда вы не можете достичь того, что хотите, с помощью новых специальных методов WPF.