Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF和Silverlight命令实现对M-V-VM(M-V-P)模式无用吗?_C#_Wpf_Silverlight_Design Patterns_Mvp - Fatal编程技术网

C# WPF和Silverlight命令实现对M-V-VM(M-V-P)模式无用吗?

C# WPF和Silverlight命令实现对M-V-VM(M-V-P)模式无用吗?,c#,wpf,silverlight,design-patterns,mvp,C#,Wpf,Silverlight,Design Patterns,Mvp,请原谅我的无知,我最近才开始用Silverlight编写代码 我尝试在Silverlight中实现命令模式,但遇到了麻烦。 他们说命令很棒,因为您可以将它们写入xaml,这样您就可以保持代码的整洁,而且您的视图和viewmodel之间存在松散耦合,因为视图中没有对viewmodel的直接引用 您不能保持代码干净,因为您只能将一个命令绑定到一个控件,并且必须确定绑定命令时哪个事件将触发命令。如果控件有30个事件,则必须选择一个用于命令。其他29个将从代码隐藏中的事件处理程序执行其他命令 松散耦合可

请原谅我的无知,我最近才开始用Silverlight编写代码

我尝试在Silverlight中实现命令模式,但遇到了麻烦。 他们说命令很棒,因为您可以将它们写入xaml,这样您就可以保持代码的整洁,而且您的视图和viewmodel之间存在松散耦合,因为视图中没有对viewmodel的直接引用

您不能保持代码干净,因为您只能将一个命令绑定到一个控件,并且必须确定绑定命令时哪个事件将触发命令。如果控件有30个事件,则必须选择一个用于命令。其他29个将从代码隐藏中的事件处理程序执行其他命令

松散耦合可以更简单地通过依赖项注入来实现,命令添加了一层无用的间接层,没有任何额外的功能,它们只会使代码的维护变得更加困难。当您针对一个接口进行编程并准确查看调用了什么方法时,当您必须在命令定义和viewmodel之间不断切换时,维护代码就更容易了

我是否遗漏了什么,或者命令实际上不用于视图和视图模型交互

请看下面的问题。这就是为什么我没有通过命令得到所有的宣传:


我相信您可以用附加的行为模式欺骗事件处理程序。 有关详细信息,请参阅以下url:


SL2.0没有WPF那么强大,您必须在后面编写一些代码:-(

不确定您是否读过这篇关于MVVM和SL的文章,讨论了SL上的命令限制:


看看Prism()及其DelegateCommand基础设施。Silverlight和WPF在ViewModel(或Presenter)中创建命令是一个很好的解决方案也在Silverlight 3中,行为可以为您提供一些相同的基于XAML的语法。

有多个实现使用附加的行为来实现命令,但没有一个解决了在同一控件上处理多个事件的问题。实际上,WPF与Silverlight concerni具有相同的限制ng命令。每个控件类型只能为一个事件分配一个命令。谢谢,这个解决方案似乎是有效的!我还没有在解决方案中实现它,但是示例看起来很有希望。