首页 文章

MVVM中的控制器,如何从viewmodel获取信息到它的控制器?

提问于
浏览
10

我们正在使用MVVM模式构建应用程序,我们有控制器使用DI连接所有视图和视图模型 . 我见过的MVVM的所有例子都非常简单,只有1个视图 . Viewmodels如何/应该与控制器对话?如果viewmodel将事件发送回控制器,控制器会知道模型和视图吗?应该在哪里进行保存?模型?控制器?

5 回答

  • 1

    你的ViewModel可能不依赖IController或其他接口,所以他们可以回复它吗?我尝试尽可能多地保留ViewModel中的应用程序逻辑,因为这些类很容易变得臃肿 .

    MyViewModel(IController controller)
     {
         this.controller = controller;
     }
    
     void Save()
     {
         this.controller.Save();
     }
    

    我同意MVVM框架的样本往往过于简单化 . 特别是,在您的应用程序中的视图/屏幕之间移动是我希望看到的更多示例 . 我创建了一个IViewManager接口,允许我的ViewModel请求我们移动到另一个视图 .

  • 0

    如果应用程序具有多个模块并需要分离关注点,我建议使用prism框架 .

    http://msdn.microsoft.com/en-us/library/gg406140.aspx

  • 3

    我们也使用控制器,但在我们的情况下,他们负责应用程序工作流程 . Controller知道ViewModel和Model,但不知道具体的View,因为这将由IoC Container注入 .

    如果您对显示的不仅仅是一个UI(模式对话框,带有条件工作流的向导)的示例感兴趣,那么您可以查看:

    WPF应用程序框架(WAF) - http://waf.codeplex.com

  • 2

    我使用类似的设置 . 在我的控制器中,我的DI和视图注入失败,我有时会继续引用ViewModel(它持有View) . 在某些情况下,我可能在VM上有一个由控制器处理的事件 . 在其他极端情况下(例如,如果VM / V是在控制器外部创建的,比如在另一个VM中创建),我甚至可以使用EventAggregator(具有强引用)来侦听可能在VM上触发的事件 . 在这种情况下,不需要存储到VM的引用 .

  • 6

    如何使用其中控制器订阅VM事件或使用中介器模式的事件,其中中介器被注入VM中 .

相关问题