视图之间的交互

我正在使用WPF并尝试编写MVVM方式。

我了解每种观点都有其自己的观点模型,并且这种模式运作得很好。 尽管如此,我正在努力管理视图之间的交互。

假设我有两个视图View1和View2,每个视图都有自己的ViewModel,ViewModel1和ViewModel2。 如果我在View1和按钮上有一个组合框,关闭第一个视图的正确方法是什么,通知第二个视图选择并在按下按钮后显示第二个视图? 它似乎不应该在模型中出现,因为它是一个UI的东西。 ViewModel不应该知道如何打开和关闭WPF表单(或者应该如何?)并且视图不应该知道任何其他ViewModel(或者他们应该如何?)

那么这些问题如何解决? 简而言之:

1)数据如何在视图之间传递?

2)什么管理视图的生存期/可见性?


这将取决于您是在查看模型还是先查看,具体的实现细节取决于您是否使用MVVM框架。 如果你不使用框架,那么我强烈建议你开始使用它。

在你的例子中,当按下按钮时, ViewModel1上的方法将被调用。 如果先做视图模型(我会推荐),你会实例化ViewModel2一个实例,此时你可以将组合框选择传递给ViewModel2的构造函数。

根据您的框架,将会有不同的方式显示与ViewModel2相关联的ViewModel2


对于1)可以通过DataModel同步数据。 如果每个视图共享DataModel的相同实例,并且它实现INotifyPropertyChanged则可以模拟更新多个视图。

你的sesond问题是一个设计问题,因为@ devdigital声明它可以取决于它是先查看还是先查看模型。 我会考虑引入一个Controller类,就像ASP.Net MVC的工作方式一样,它控制显示哪个视图。 您可以在控制器可以侦听的ViewModel上公开一个ViewClosed事件,并根据您的工作流程打开另一个视图。


您可能会考虑引入负责ViewModel生命周期管理的控制器 。 此外,它们在ViewModels之间进行调解。

WPF应用程序框架(WAF)的示例应用程序显示了如何实现这些控制器。

链接地址: http://www.djcxy.com/p/56171.html

上一篇: interactions between views

下一篇: WPF MVVM Get Parent from VIEW MODEL