В MVVM, как лучше всего ViewModel реагировать на действия пользователя в View? - PullRequest
21 голосов
/ 13 мая 2009

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

  • View знает о ViewModel
  • ViewModel знает о модели
  • , но не работает вверх, поэтому Модель ничего не знает о ViewModel
  • и ViewModel ничего не знает о View

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

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

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

  3. Тогда я прочитал совет , например " В MVVM , используйте RoutedEvents как можно меньше , а no RoutedCommands вообще."ОК.

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

  5. Тогда некоторые люди также используют " RelayCommand ".

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

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

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

Ответы [ 2 ]

11 голосов
/ 13 мая 2009

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

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

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

6 голосов
/ 13 мая 2009

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

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

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

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