如何使用 MVVM 打开对话框窗口

本文关键字:窗口 打开对话框 MVVM 何使用 | 更新日期: 2023-09-27 17:55:50

有人可以帮我弄清楚如何打开对话框窗口吗?

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

当用户按下该按钮时,

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

一个按钮说提交,

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

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

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

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

假设 MainWindow 和

DialogWindow 的数据上下文是 MainWindowViewModel 和 UserInputViewModel。

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

如何使用 MVVM 打开对话框窗口

不是真正的答案,但我想无论如何我都会添加我的 POV。如何以 MVVM 的方式使用对话框,是还没有人真正设法以优雅的方式完成的事情。基本上有3个阵营:
(1)像你描述的那样使用对话服务的人,
(2)那些认为MVVM很好,但不是你应该花费无数小时试图正确的东西的人,所以他们使用代码隐藏,以及
(3)像我这样的人,他们认为对话框和父视图经常联系在一起,以至于他们应该共享视图模型(就像,对话框只是显示视图模型数据的一种方式)。

当尝试执行比简单数据绑定更高级的操作时,MVVM 的学习曲线可能会稍微陡峭一些。您是否查看了 MVVM Light 工具包?它包括一个信使类,便于在各个地方发送消息。侦听器注册他们想要的消息,而发送者只是发布它们。通过这种方式,听众或发送者都不知道对方,但可以交流。这意味着视图可以注册消息,视图模型可以发送消息。

这个问题谈论的是做一些与你想做的事情非常相似的事情。顺便推荐MVVM Light工具包!

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