如何使用MVVM打开对话窗口

时间:2011-05-10 22:21:20

标签: c# wpf mvvm

有人可以帮我解决如何打开对话窗口的问题,

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

当用户按下该按钮时,

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

一个按钮说提交,

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

不是真的答案,但我想我还是会添加我的POV。如何以MVVM的方式使用对话框,是一个没有人真正设法以优雅的方式做的事情。基本上有3个阵营:
(1)使用你所描述的对话服务的人,
(2)认为MVVM是好的人,但不是你应该花费数小时试图改进的人,所以他们使用代码隐藏,并且 (3)像我这样的人,他们认为通常情况下,对话框和父视图是如此紧密相连,以至于他们应该共享视图模型(如同,对话框只是一种显示方式您的viewmodel中的数据。)

答案 1 :(得分:1)

当尝试做一些比简单数据绑定更先进的事情时,MVVM的学习曲线会稍微陡峭一些。你有没有看过MVVM Light工具包?它包括一个Messenger类,便于在该地方发送消息。监听器注册他们想要的消息,发送者只是发布它们。以这种方式,听众或发送者都不知道彼此,但可以进行通信。这意味着View可以注册消息,ViewModel可以发送消息。

This question谈论做一些非常类似于你想做的事情。我推荐MVVM Light工具包!

我不确定如何使用对话框的结果将它们发送到ViewModel。我假设你正在努力从VM到View进行通信。