【问题标题】:How to open a Dialog Window using MVVM如何使用 MVVM 打开对话窗口
【发布时间】:2011-08-22 20:47:42
【问题描述】:

谁能帮我弄清楚如何打开一个对话框窗口,

我能想到的最简单的场景是: 我们有一个带有按钮和标签的主窗口,

当用户按下该按钮时,

出现一个带有文本框和 2 个按钮的对话窗口,

一个按钮说提交,

当用户按下提交时它会关闭窗口,

它将主窗口背景的颜色更改为红色,

并获取放置在文本框中的输入并将主窗口上的标签更改为该内容(我非常担心这部分我知道如何做这部分),

而另一个按钮只是取消操作,

假设MainWindow和DialogWindow的Datacontext分别是MainWindowViewModel和UserInputViewModel。

现在this linkCameron 谈论使用服务,即 IDialogService 和 DialogService 现在有人可以向我解释如何在上述场景中实现这些方法吗?或者如果有其他方法可以做到这一点,请告诉我? 请不要将我链接到任何页面,因为我可能已经阅读了所有页面并且我似乎无法清楚地了解要发生的事情? ~慢慢失去理智,因为 MVVM 让事情变得更加困难:(

【问题讨论】:

  • 您可能对 WPF Application Framework (WAF) 的 EmailClient (ViewModel) 示例应用程序感兴趣。它展示了如何在 MVVM 应用程序中显示模式对话框。
  • 你在使用任何框架吗?像 Prism、MVVMLight 或 WAF 等?

标签: c# wpf mvvm


【解决方案1】:

不是一个真正的答案,但我想我还是会添加我的 POV。如何以 MVVM 方式使用对话框,目前还没有人真正以优雅的方式做到这一点。基本上有 3 个营地:
(1) 像您描述的那样使用对话服务的人,
(2) 那些认为 MVVM 很好,但不是你应该花费无数小时试图做到正确的人,所以他们使用代码隐藏,并且
(3) 像我这样的人,他们通常认为对话框和父视图是如此紧密地联系在一起,以至于它们应该共享视图模型(例如,对话框只是显示来自您的视图模型的数据)。

【讨论】:

  • 本想将其作为评论发布,但字符限制打击了我:(
  • 共享相同的视图模型并不是一个好主意,因为您最终会在视图模型中添加更多命令,这些命令会绑定到不同的视图,从而导致成堆的垃圾代码。
【解决方案2】:

当尝试做一些比简单数据绑定更高级的事情时,MVVM 的学习曲线可能会稍微陡峭一些。你检查过 MVVM Light 工具包吗?它包括一个 Messenger 类,便于在各处发送消息。侦听器注册他们想要的消息,发送者只是发布它们。通过这种方式,收听者和发送者都不知道对方,但可以进行通信。这意味着 View 可以注册一条消息,而 ViewModel 可以发送一条消息。

This question 谈论做一些与你想做的事情非常相似的事情。顺便推荐一下 MVVM Light 工具包!

我不确定您如何使用对话框的结果将它们发送到 ViewModel。我假设对你来说更难的部分是从 VM 到 View 的通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多