MVVM ICommand替代品
我已经开始创建一个wpf mvvm应用程序。 ViewModel的一个重要组成部分是一系列ICommands,它们有一个松散耦合的方式允许视图与视图模型交互。
我的问题是,为什么我不能直接绑定到一个方法?
我已经使用Josh Smith的ICommand的RelayCommand实现,它允许你将一个delgates注入一个ICommand对象,但是真的有更简单的方法来允许按钮push来调用viewmodel中的一个方法吗?
我是MVVM的新手,我相信我需要一些启发
您不能直接绑定到方法,因为Button
(例如)没有接受委托的属性。 相反,它有一个类型为ICommand
的Command
属性。 RelayCommand
(aka DelegateCommand
)只是一个包装委托的ICommand
。
我没有看到技术上的原因,为什么视图不可能通过标记扩展的方式绑定到视图模型上的特定方法:
<Button Command="{ViewModelMethod SomeMethodName}"/>
但是,这会更慢,并会增加视图和视图模型之间的耦合。 如果视图仅知道类型为ICommand
的视图模型上的属性,则该命令的实现可能完全改变(或者方法可以被重命名),而不会意识到视图。
我完全不同意。
调用的速度没有意义:命令是用户交互,他们从不需要速度。
关于耦合的争论也是有缺陷的。 为什么{Binding MyProperty}不是耦合而是{ViewMethod MyMethod}?
将特意制作的“命令”包裹在方法中的要求是愚蠢的。 命令在封面下可能是有用的实现,但是我们已经在C#中使用了方法,并用大而笨重的代码替换它们。
而关于MarkupExtension和Binding的事情,这确实很困难。 但这是可以完成的。 实际上,完成后,您可以查看CodePlex上的MethodCall项目:http://methodcallthing.codeplex.com/
您可以使用绑定为该方法选择“this”,并可以使用绑定来获取参数。 所有这些都是生命的,即在命令被调用时计算。 另一个附加功能是方法调用的推出结果,您也可以使用绑定(OneWayToSource)。
ICommand为您提供了CanExecute,这是控制启用所需的。 一个简单的代表不会。 ICommand是要走的路。
链接地址: http://www.djcxy.com/p/56155.html