WPF:MVVM:命令与CallMethodAction?

J4N*_*J4N 4 wpf mvvm command-pattern mvvm-light

我正在学习一个新的(小)项目的MVVM模式,我有一个关于在我们的控制器上调用动作的方法的问题:

我看到很多教程他们告诉我们使用Command,暗示声明一个RelayCommand,初始化它并创建RelayCommand调用的动作.

在另一方面,我有一位同事告诉我,我可以使用CallMethodAction触发器:

<i:Interaction.Triggers> 
  <i:EventTrigger> 
    <ei:CallMethodAction MethodName="Init" TargetObject="{Binding}" /> 
  </i:EventTrigger> 
</i:Interaction.Triggers> 
Run Code Online (Sandbox Code Playgroud)

对我来说,他的方法的优点是我不必为命令制作一些inits方法(可能永远不会使用).

那我错过了什么?为什么每个人都使用命令?

amn*_*jak 6

命令是开箱即用的解决方案,只能附加到实现ICommand接口的元素.另一方面,事件触发器可以附加到任何事件,使它们更灵活.我遵循一般策略来使用涉及用户交互(按钮,菜单)和CanExecute模式的命令.我的命令严格连接到可视界面(提供标题,图像源等).当我想摆脱代码隐藏时,我在任何其他情况下都使用CallMethodAction.


Paw*_*tyl 4

命令提供在 ViewModel 代码中禁用的功能。这可以用于自动禁用例如绑定到命令的按钮。这就是让 Commands 变得更好的原因。此外,根据您的逻辑,您可以在同一插槽中动态提取另一个命令,它将重新路由来自 View 的流量,而在 CallMethodAction 中,您必须在被调用的方法中编写重新路由逻辑,这将是丑陋的。

正如您所看到的,这取决于您想要完成的任务以及您的逻辑有多复杂:)