在 MVVM WPF 应用程序中。
如何从 ViewModel
设置第二个窗口父级?
例子:
view1
-- viewModel1
viewModel1
的命令调用:
var view2 = new view2
view2.Owner
= <----这是问题区域。如何从 viewModel
获取 view1 作为所有者?
view2.Show()
编辑:
请参阅下面已接受的答案,然后阅读以下编辑内容。
我正在使用 MVVM light -> http://mvvmlight.codeplex.com/ (顺便说一句)
内置的消息传递系统很棒。我现在从 View 模型向我的 View 发送一条消息,告诉它显示另一个窗口。
对于消息,我目前在主视图中使用带有 switch 语句的字符串来确定打开哪个 View ;然而,我可能会修改同样属于 MVVM light 工具包的 token 。
谢谢!
最佳答案
在我看来,打开一个新窗口是 View 的责任,而不是 ViewModel 的责任。就我个人而言,我会使用与显示对话框相同的方法(已经在本论坛中讨论过):
让 ViewModel 向 View 发送消息,请求它打开一个新窗口。 (或者)使用 IDialogService 或您想要调用它的任何您传递给 ViewModel 的构造函数的名称。该服务将负责打开窗口(或将此任务委托(delegate)给 View )。 这样,您就可以保持关注点的清晰分离,并且您的 VM 仍然可测试(您可以单元测试打开新 WIndow 的请求是否已发送,但您无法测试该窗口是否确实已打开)。
这有意义吗?
干杯,
劳伦特
关于c# - WPF MVVM 从 VIEW MODEL 获取父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2761162/