2011-12-29 55 views
3

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

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

对我来说,必须提供ViewModel内部的逻辑似乎会稍微减少命令模式的值。我想我不明白这样做的主要区别,并有一个代码实现UI事件的命令处理程序。是否有任何理由我应该使用RoutedCommand模式而不是上面描述的更经典的方法?

回答

3

你可以这样做,但它需要一些适当的路由请求的方法。

在您的示例中,只要OpenCustomerViewCommand知道如何以及在哪里打开“客户视图”,您可以轻松地在任何地方重复使用。不要使用像RelayCommand这样的类,您可以直接实施ICommand并添加您的逻辑来执行此操作。

然而,问题在于大多数命令往往更多地是用于执行ViewModel特定功能的xaml适配器。在我工作的大多数应用程序中,通常只有很少的命令需要重用 - 大多数命令都与特定于ViewModel的功能绑定在一起。因此,像RelayCommand这样的东西很容易挂钩。