如果未加载视图,则viewmodel中的事件的Subscribe方法不会调用

时间:2012-06-11 09:39:58

标签: mvvm prism

我有一个订阅了“NavigationCompletedEvent”事件的viewmodel。此视图模型需要在没有视图的情况下加载到内存中。订阅的代码就是事件就像

 var navigationCompletedEvent = eventAggregator.GetEvent<NavigationCompletedEvent>();
        navigationCompletedEvent.Subscribe(OnNavigationCompleted, ThreadOption.UIThread);

我已在Module中

显式创建了此viewmodel的对象
 // Register other view objects with DI Container (Unity)
        var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
        container.RegisterInstance(typeof(ModuleCTaskButtonViewModel), 
            new ModuleCTaskButtonViewModel(), new ExternallyControlledLifetimeManager());

但是当我从其他一些viewmodule中提升事件时,不会调用subscribe方法。

如果视图也加载到内存中,它可以正常工作。有什么想法吗?我该如何实现呢?

提前致谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,对Event聚合器的订阅是弱引用。为了使viewmodel保持活动状态,如果没有其他人正在引用它,则必须对Subscribe函数使用重载,该函数使用bool来表示您想要使用强引用。

尽管如此,我所知道的Unity咒语可能会维持所需的生命周期...但是,您的实验结果表明并非......