将 WPF 命令实现为独立对象是否可能/可行?如果是这样,这通常是如何完成的?我看到的大多数关于命令的示例通常涉及使用 RoutedCommand、RoutedUICommand 或 ICommand 的其他一些实现,例如 RelayCommand。这些命令在 MVVM 模式中的工作方式是通过属性公开这些命令类型之一的实例。在 ViewModel 内部,命令的逻辑被实现为 ViewModel 上的一个方法,然后作为委托传递给命令对象。
据我了解,“经典”命令模式是将每个命令实现为它自己的独立对象,例如 OpenCustomerViewCommand。由于逻辑将完全封装在它自己的对象中,因此它可能会在我的应用程序的其他部分中重用。例如,如果我可以从我的应用程序中的多个位置打开 CustomerView,那么能够简单地在可以访问 CustomerView 的每个 ViewModel 上创建 OpenCustomerViewCommand 的实例可能会有所帮助,而不是将该方法复制并粘贴到每个 ViewModel ,并将委托传递给 RelayCommand。如果我理解正确,预定义的应用程序命令(例如剪切和粘贴)会以这种方式运行。
对我来说,必须在 ViewModel 中提供逻辑似乎会降低命令模式的价值。我想我并不真正理解这样做与背后的代码实现 UI 事件的命令处理程序之间的主要区别。有什么理由我应该使用 RoutedCommand 模式而不是我上面描述的更经典的方法?