【问题标题】:Are WPF and Silverlight command implementations useless for the M-V-VM (M-V-P) pattern?WPF 和 Silverlight 命令实现对 M-V-VM (M-V-P) 模式没有用吗?
【发布时间】:2009-04-02 13:44:47
【问题描述】:

请原谅我的无知,我最近才开始在 Silverlight 中编码。

我尝试在 Silverlight 中实现命令模式并碰壁。 他们说命令很棒,因为您可以将它们写入 xaml,因此您可以保持代码隐藏干净,而且您的视图和视图模型之间存在松散耦合,因为视图中没有对视图模型的直接引用。

您不能保持代码隐藏干净,因为您只能将一个命令绑定到一个控件,并且您必须决定在绑定时哪个事件会触发您的命令。如果一个控件有 30 个事件,你必须选择一个来指挥。其他 29 个将在后面的代码中执行来自事件处理程序的其他命令。

松散耦合可以通过依赖注入更简单地实现,命令添加了一个无用的间接层,没有提供任何额外的东西,它们只会让你的代码更难维护。当您针对接口进行编程并准确查看调用了哪些方法时,维护代码会更容易,然后您必须在命令定义和视图模型之间不断跳转。

我是否遗漏了什么,或者命令真的不适合用于视图和视图模型交互?

请看下面的问题。这就是为什么我没有得到所有关于命令的炒作:

How should I handle multiple events per control w/command pattern using MVVM in Silverlight?

【问题讨论】:

    标签: c# wpf silverlight design-patterns mvp


    【解决方案1】:

    看看 Prism (http://prism.codeplex.com) 及其 DelegateCommand 基础架构。它是 Silverlight 和 WPF 在 ViewModel(或 Presenter)中创建命令并直接绑定到它的一个很好的解决方案。同样在 Silverlight 3 中,行为可以为您提供一些相同的基于 XAML 的语法。

    【讨论】:

    • 谢谢,这个解决方案似乎是一个有效的解决方案!我还没有在解决方案中实现它,但这些示例看起来很有希望。
    【解决方案2】:

    SL 2.0 没有 WPF 强大,你必须在后面写一些代码:-(.

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

    http://msdn.microsoft.com/en-us/magazine/dd458800.aspx

    【讨论】:

    • 实际上,WPF 在命令方面与 Silverlight 有相同的限制。您只能将命令分配给每种控件类型的一个事件。
    【解决方案3】:

    我相信您可以使用附加的行为模式来欺骗您的事件处理程序。 更多信息请查看以下网址:

    http://www.codeproject.com/KB/WPF/AttachedBehaviors.aspx

    【讨论】:

    • 有多种实现使用附加行为来实现命令,但都没有解决在同一个控件上处理多个事件的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2010-09-30
    • 2010-10-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多