C# Silverlight:我可以在Mef初始化期间提前加载ViewModel吗?

C# Silverlight:我可以在Mef初始化期间提前加载ViewModel吗?,c#,.net,silverlight,prism,mef,C#,.net,Silverlight,Prism,Mef,我在silverlight应用程序中使用MEF和PRISM。我想在MefInit中加载所有共享视图模型,以便EventAggregator能够正常工作 问题是我在一个ViewModel中共享了发布者,而在另一个ViewModel中共享了订阅者。加载相应视图时,将导入第一个ViewModel。现在,在某个事件上,我想导航到一个共享了不同ViewModel的不同视图,我正在使用EventAggregator 但是当我从前一个ViewModel发布时,因为后一个ViewModel仍然没有加载,并且还没

我在silverlight应用程序中使用MEF和PRISM。我想在MefInit中加载所有共享视图模型,以便EventAggregator能够正常工作

问题是我在一个ViewModel中共享了发布者,而在另一个ViewModel中共享了订阅者。加载相应视图时,将导入第一个ViewModel。现在,在某个事件上,我想导航到一个共享了不同ViewModel的不同视图,我正在使用EventAggregator

但是当我从前一个ViewModel发布时,因为后一个ViewModel仍然没有加载,并且还没有订阅事件,所以它失败了。但是,由于虚拟机是共享的,所以事件在第一次调用之后就可以工作了


请建议,我该怎么做,哪里做错了。

IMHO:PRISM MVCVM中仍然需要控制器类:。这些轻量级类都可以在启动时加载,并独立于任何数据或VM类处理所有事件。VM不应在发送/接收事件时做出决策。虚拟机只是视图的绑定层。如果添加控制器类,则不会出现您描述的问题。谢谢。你能告诉我一些我能理解你真正意思的文章吗?它是应用于MVVM的MVC。PRISM模块仅注册控制器,当初始化订阅和发布消息时,控制器注册其负责的视图和虚拟机。这是我们在商业Silverlight代码生成/建模包中看到的一种模式,我们现在在所有项目中都使用它。通过这种方式,视图和虚拟机可以在MEF中按需加载,但通常是少量代码的逻辑在控制器的早期出现。正如您发现的,在事件发布后,您无法订阅这些事件。与MEF相比,我更喜欢标准棱镜,但大多数原则都适用于两者。