RoutedCommand и RoutedUICommand много чего хотят. Есть встроенная поддержка текста и жестов клавиатуры. Вы можете привязать коллекцию RoutedUICommands к пункту ItemsSource, и он автоматически создаст и свяжет пункты меню для вас. Некоторые команды (Вырезать, Копировать, Вставить) автоматически поддерживаются встроенными средствами управления.
Однако всякий раз, когда я использую MVVM, я обнаружил, что перенаправленные команды плохо подходят из-за повторяющегося шаблонного XAML и кода, который я должен написать для каждой из них. Когда я делаю MVVM, я обычно использую RelayCommand вместо перенаправленных команд. Иногда это адекватный обходной путь, но он имеет свои недостатки - например, жесты клавиш становятся намного сложнее .
Но после просмотра сеанса Роба Айзенберга "Создайте свою собственную MVVM Framework" я больше не удовлетворен командами реле и их недостатками. Единственная проблема с маршрутизируемыми командами заключалась в повторяющемся шаблонном коде, и после того, как вы выделите этот повторяющийся код в среду и примените соглашения, больше не возникает никаких причин не использовать маршрутизированные команды в MVVM.
Технически, похоже, это не будет сложно. Фреймворк должен просто привязать к представлению CommandManager.CanExecute и Выполненные события и применить соглашения для поиска методов и свойств в ViewModel - например, когда команда Cut выполняется, ищите метод ExecuteCut (и свойство CanExecuteCut) в ViewModel. Я мог бы построить свою собственную инфраструктуру MVVM, которая упростила бы это.
Но у меня вопрос: уже существуют фреймворки MVVM, которые работают с RoutedCommand? Единственный фреймворк MVVM, с которым я знаком в любой глубине, это Caliburn.Micro, и в настоящее время он не поддерживает маршрутизируемые команды таким образом (что удивляет меня, так как он поддерживает свой собственный аромат пузырящихся действий).