当前位置: 首页 > 编程语言 > C#

WPFMVVMgetsparentfromVIEWMODEL分享

时间:2023-04-10 20:22:52 C#

WPFMVVMgetsparentfromVIEWMODELinMVVMWPFapplication.如何从ViewModel设置第二个窗口父级?示例:view1-viewModel1命令调用viewModel1:va??rview2=newview2view2.Owner=<--这就是问题所在。如何从viewModel获取view1作为所有者?view2.Show()编辑:查看下面接受的答案,然后阅读下面的编辑。我正在使用MVVMlight->http://mvvmlight.codeplex.com/(顺便说一句,很棒)内置的消息传递系统很棒。我现在从视图模型向我的视图发送一条消息,告诉它显示另一个窗口。对于消息,我目前在主视图中使用带有switch语句的字符串来确定打开哪个视图;但是我可能会修改令牌,它也是MVVMlight工具包的一部分。谢谢!在我看来,打开一个新窗口是View的责任,而不是ViewModel。就个人而言,我会使用与显示对话框相同的方法(这已在本论坛中讨论过):让ViewModel向View发送一条消息,请求它打开一个新窗口。(或)使用IDialogService或任何您想调用它并传递给ViewModel的构造函数。该服务将负责打开窗口(或将此任务委托给视图)。这样你就可以保持关注点的清晰分离,并且你的VM仍然是可测试的(你可以单元测试打开一个新WIndow的请求是否已发送,但你无法测试该窗口是否实际打开)。那有意义吗?干杯,洛朗从你的视图模型调用Messenger.Default.Send(newNotificationMessage("OpenWindow"));从您的视图的代码隐藏(调用第二个视图的视图)轻松地在构造函数中编写:Messenger.Default.Register(this,ReplyToMessage);并在视图的代码隐藏中编写此方法:privatevoidReplyToMessage(NotificationMessagemsg){if(msg.Notification=="OpenWindow"){win.ShowDialog();我没有自己的答案,但这里有一些链接指向我最近一直在寻找的可能有帮助的东西。我也会对任何其他建议感兴趣。据我所知,关键是您不应该尽可能在视图模型中创建视图,因此您需要一种以松散耦合的方式传达您需要的内容的方法。http://www.codeproject.com/KB/WPF/XAMLDDialog.aspxhttp://www.codeproject.com/KB/architecture/MVVM_Dialogs.aspx使用MVVM处理WPF中的对话框你可以这样做,就像你需要创建一些事件并在视图中注册它们并在视图模型中调用它们。并打开那个弹出窗口。像这个例子publicclassMainclass:MainView{publicdelegateabcRegisterPopUp(abcA);公共RegisterPopUpPOPUpEvent;公共RelayCommandShowCommand{私有集;得到;}publicvoidShowCommand(){ShowCommand("你的参数");在MainView内部mn=newMainView();在这里注册事件,比如mn.POpUpEvent+=然后点击tab按钮两次,在registerpopup方法中编写打开popup的代码。Prism-EventAggrigator是我们创建没有依赖关系的独立模块的好方法。第一个视图模型将发布事件,然后另一个视图或视图或视图模型可以从事件聚合器订阅该事件。在这种情况下,Unity容器也可以使用依赖注入将一个视图模型注入到另一个视图模型中。以上就是C#学习教程:WPFMVVM从VIEWMODEL获取父共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: