Возможно / практично ли реализовывать команды WPF как отдельные объекты? Если да, то как это обычно делается? Большинство примеров, которые я вижу о командовании, обычно включают использование RoutedCommand, RoutedUICommand или какой-либо другой реализации ICommand, такой как RelayCommand. То, как эти команды работают в шаблоне MVVM, заключается в предоставлении экземпляра одного из этих типов команд через свойство. Внутри ViewModel логика для команды реализована в виде метода в ViewModel и затем передается в качестве делегата объекту команды.
«Классический» шаблон команд, насколько я понимаю, будет состоять в том, чтобы каждая команда была реализована в виде отдельного объекта, такого как OpenCustomerViewCommand. Поскольку логика будет полностью инкапсулирована в своем собственном объекте, она потенциально может быть повторно использована в других частях моего приложения. Например, если бы я мог открыть CustomerView из нескольких мест в моем приложении, было бы полезно иметь возможность просто создать экземпляр OpenCustomerViewCommand в каждой ViewModel, к которой можно получить доступ к CustomerView, а не копировать и вставлять этот метод в каждую ViewModel. и передайте делегата в RelayCommand. Если я правильно понимаю, предопределенные ApplicationCommands, такие как Cut и Paste, ведут себя таким образом.
Мне кажется, что необходимость обеспечить логику внутри ViewModel немного уменьшает значение шаблона команды. Я полагаю, что я действительно не понимаю основной разницы между этим и наличием кода, который реализует обработчики команд для событий пользовательского интерфейса. Есть ли причина, по которой я должен использовать шаблон RoutedCommand вместо более классического подхода, который я описал выше?