我们正在建设使用MVVM模式的应用程序,我们有一个线了使用DI的所有意见和的ViewModels控制器。 我见过MVVM的所有例子都是真的简单,并有1个视图。 如何/应该的ViewModels顶嘴控制器? 控制器知道的模型和视图,如果视图模型事件发送回控制器? 应该在哪里一个存储发生呢? 模型? 控制器?
Answer 1:
我们使用控制器太多,但在我们的情况下,他们是负责应用程序的工作流程。 该控制器知道该视图模型和模型,但没有具体的观点,因为这将由IOC容器注入。
如果你感兴趣的是显示了一个例子不仅仅是一个UI(模态对话框,向导有条件工作流程)以上,那么你可能看看:
WPF应用程序框架(WAF) - http://waf.codeplex.com
Answer 2:
难道你的视图模型不采取上的一个IController或其他一些接口的依赖关系,这样他们就可以顶嘴呢? 我尽量保持尽可能多的应用程序逻辑出视图模型成为可能,因为这些类可以很容易显得臃肿。
MyViewModel(IController controller)
{
this.controller = controller;
}
void Save()
{
this.controller.Save();
}
我不同意,MVVM框架往往是与他们的样本过于简单化。 特别是,在你的应用程序视图/屏幕之间移动的是我希望看到更多的例子。 我创建一个IViewManager接口,允许我的ViewModels要求我们移动到另一个视图。
Answer 3:
在具有多个模块,并且需要关注点分离的应用程序的情况下,我会建议使用棱镜框架。
http://msdn.microsoft.com/en-us/library/gg406140.aspx
Answer 4:
我用一个类似的设置给你。 在我的控制,我的DI和观点注射下山,我有时保持参照视图模型(其持有的观点)。 有些情况下,我可能会对其中由控制器来处理虚拟机的事件。 在其他的,极端的情况下(比如,如果VM / V是控制器之外创建的,说在另一个VM),我可能甚至使用EventAggregator(具有较强REF)听,可能在虚拟机上触发的事件。 在这种情况下,不需要存储REF到VM。
Answer 5:
如何有关使用事件,其中所述控制器所预订VM事件或使用其中的介体在VM中注入的介质的图案。
文章来源: Controllers in MVVM, How to get info from viewmodel to it's controller?