c# - WPF MVVM 从 VIEW MODEL 获取父级

标签 c# .net wpf mvvm mvvm-light

在 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/

相关文章:

c# - 无法在 azure 上使用框架 4.6.1 执行 dotnet core 站点

c# - 使用 Owin 和 Windows 身份验证在 MVC 5 应用程序中添加声明

c# - 按值传递与按引用传递

c# - 如何从另一个表单刷新一个表单?

c# - 如何从 Windows 窗体中的给定 url 下载文件到特定路径?

c# - 异步方法 .Result 与同步方法

c# - 值不能为空。错误

c# - 在 WPF 面板中托管外部应用程序

.net - 从 Silverlight 调用 WCF 服务 : Somewhere my parameters are disappearing

WPF - 当 ItemsSource 更改时重置 ListBox 滚动位置