Ответ 1
Как вы заметили, RoutedCommand
class является реализацией интерфейса ICommand
, его основное отличие, если его функция аналогична к :
Методы Execute и CanExecute в RoutedCommand не содержат логику приложения для команды, как в случае с типичной ICommand, но, скорее, эти методы поднимают события, которые пересекают дерево элементов, ищущих объект с CommandBinding. Обработчики событий, связанные с CommandBinding, содержат логику команд.
Метод Execute вызывает события PreviewExecuted и Executed. Метод CanExecute вызывает события PreviewCanExecute и CanExecute.
В случае, когда вы не хотите поведения RoutedCommand
, вы будете смотреть на свою собственную реализацию ICommand
. Что касается шаблона MVVM, я не могу сказать, что одно решение, похоже, у каждого своя методология. Однако, вот несколько подходов к этой проблеме, с которыми я столкнулся:
- Использование RoutedCommands с ViewModel в WPF
- Релейная логика команд
- Простая команда (почти идентичная команде Relay, но стоит ее прочитать)