【问题标题】:Right design for a command that closes the caller window?关闭调用者窗口的命令的正确设计?
【发布时间】:2012-08-03 16:29:35
【问题描述】:

我有一个 WPF 对话框(Window 的继承者)。该对话框有一个“确定”按钮,该按钮绑定到 ViewModel 上的“进程”命令。 (“进程”命令是 Josh Smith RelayCommand。)“确定”按钮上的命令参数设置为对话窗口本身。如果处理成功,则从 ViewModel 的命令处理程序内部关闭对话窗口。在我看来,这似乎违反了单一职责原则。可能会或可能不会关闭调用者窗口的命令的正确模式是什么?

【问题讨论】:

    标签: wpf design-patterns command


    【解决方案1】:

    虽然看起来有些设计模式被破坏了,但通常的做法是 ViewModel 可能会知道其 View 以实现特定任务,例如关闭对话框或设置特定状态。

    在 View-ViewModel 绑定期间,可以使用对 View 的引用来初始化 ViewModel。稍后通过执行命令,ViewModel 可以使用视图通过通用接口提供的功能。

    在你的情况下,我建议这样做(就像Caliburn Micro 那样),而不是将窗口作为CommandParameter 传递。

    【讨论】:

    • 所以 Caliburn.Micro 使用类命名约定来定位视图。我也不确定我是否喜欢这样。我喜欢你在构建时传递视图的想法,但这带来了一个后续问题。通常我喜欢在视图的资源部分构建 ViewModel 类。我喜欢这样,因为我获得了 XAML 中 ViewModel 属性的 Intellisense。有没有一种在 XAML 中构造这些东西的好方法,同时仍然支持 ViewModel 的 IoC 类型的初始化?
    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-01-25
    • 2013-01-11
    相关资源
    最近更新 更多