5

我正在用一个新的(小)项目学习 MVVM 模式,我对在我们的控制器上调用操作的方式有一个疑问:

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

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

<i:Interaction.Triggers> 
  <i:EventTrigger> 
    <ei:CallMethodAction MethodName="Init" TargetObject="{Binding}" /> 
  </i:EventTrigger> 
</i:Interaction.Triggers> 

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

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

4

2 回答 2

7

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

于 2012-11-27T10:37:26.633 回答
4

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

如您所见,这取决于您尝试完成什么以及您的逻辑有多复杂:)

于 2012-11-27T10:01:26.773 回答