wpf - WPF 中的独立命令对象

标签 wpf command routed-commands command-pattern

将 WPF 命令实现为独立对象是否可能/实用?如果是这样,这通常是如何完成的?我看到的大多数关于命令的示例通常涉及使用 RoutedCommand、RoutedUICommand 或 ICommand 的其他一些实现,如 RelayCommand。这些命令在 MVVM 模式中的工作方式是通过属性公开其中一种命令的实例。在 ViewModel 内部,命令的逻辑作为 ViewModel 上的方法实现,然后作为委托(delegate)传递给命令对象。

据我所知,“经典”命令模式是将每个命令实现为它自己的独立对象,例如 OpenCustomerViewCommand。由于逻辑将完全封装在它自己的对象中,因此它可能会在我的应用程序的其他部分中重复使用。例如,如果我可以从应用程序中的多个位置打开 CustomerView,那么能够在可以访问 CustomerView 的每个 ViewModel 上简单地创建一个 OpenCustomerViewCommand 实例可能会有所帮助,而不是将该方法复制并粘贴到每个 ViewModel 中,并将委托(delegate)传递给 RelayCommand。如果我理解正确,预定义的 ApplicationCommand(例如剪切和粘贴)会以这种方式运行。

对我来说,必须在 ViewModel 内部提供逻辑似乎会稍微降低命令模式的值(value)。我想我真的不明白这样做与背后有代码实现 UI 事件的命令处理程序之间的主要区别。我有什么理由应该使用 RoutedCommand 模式而不是我上面描述的更经典的方法吗?

最佳答案

您可以这样做,但它需要某种适当路由请求的方法。

在您的示例中,如果 OpenCustomerViewCommand 知道如何以及在何处打开“Customer View”,您就可以轻松地在任何地方重用它。您可以直接实现 ICommand 并添加您的逻辑来执行此操作,而不是使用像 RelayCommand 这样的类。

然而,问题在于大多数命令更像是 xaml 的适配器,以执行特定于 ViewModel 的功能。在我处理过的大多数应用程序中,往往很少有真正需要重用的命令——大多数命令都与相关 ViewModel 的特定功能相关联。因此,像 RelayCommand 这样的东西使得连接起来相当容易。

关于wpf - WPF 中的独立命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662956/

相关文章:

WPF - 如何扩展(或并行工作)内置命令机制?

c# - 有没有办法将命令绑定(bind)到 ListView 或 ComboBox 选择?

wpf - 伪造 WPF 操作事件

c# - 全局按钮的动态样式,每个按钮都有不同的图像

php - yii 中的控制台应用程序无法包含 AR 模型

eclipse - 将 Eclipse 命令绑定(bind)/绑定(bind)到 swt 按钮

batch-file - 命令提示符中的全局变量

c# - Wpf 用户控件缩放问题

c# - RelayCommand 与 EventToCommand

wpf - WPF中的多键手势