我正在学习一个新的(小)项目的MVVM模式,我有一个关于在我们的控制器上调用动作的方法的问题:
我看到很多教程他们告诉我们使用Command,暗示声明一个RelayCommand,初始化它并创建RelayCommand调用的动作。
另一方面,我有一位同事告诉我,我可以使用CallMethodAction
触发器:
<i:Interaction.Triggers>
<i:EventTrigger>
<ei:CallMethodAction MethodName="Init" TargetObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
对我而言,他的方法的优势在于我不必为命令制作一些inits方法(可能永远不会使用)。
那我错过了什么?为什么每个人都使用命令?
答案 0 :(得分:6)
命令是开箱即用的解决方案,只能附加到实现ICommand
接口的元素。另一方面,事件触发器可以附加到任何事件,使它们更灵活。我遵循一般策略来使用涉及用户交互的命令(按钮,菜单),并且需要CanExecute
模式。我的命令严格连接到可视界面(提供标题,图像源等)。当我想摆脱代码隐藏时,我在任何其他情况下都使用CallMethodAction。
答案 1 :(得分:4)
命令提供在ViewModel代码中禁用的功能。这可以用于自动禁用绑定到命令的例如按钮。这就是使命令变得更好的原因。此外,基于您的逻辑,您可以在同一个插槽中动态地拔出另一个Command,它将重新路由来自View的流量,而在CallMethodAction中,您将不得不在被调用的方法中编写重新路由逻辑,这将是丑陋的。
正如您所看到的,这取决于您尝试完成的内容以及您的逻辑有多复杂:)