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