0

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

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

我已经在模块中明确创建了这个视图模型的对象,比如

 // Register other view objects with DI Container (Unity)
        var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
        container.RegisterInstance(typeof(ModuleCTaskButtonViewModel), 
            new ModuleCTaskButtonViewModel(), new ExternallyControlledLifetimeManager());

但是当我从其他视图模块引发事件时,不会调用 subscribe 方法。

如果视图也加载到内存中,它工作正常。对此有任何想法吗?我怎样才能实现它?

提前致谢。

4

1 回答 1

1

默认情况下,事件聚合器的订阅是弱引用。为了让您的视图模型保持活动状态,如果没有其他人引用它,您必须使用对订阅函数的重载,该函数接受一个布尔值来指示您想要使用强引用。

虽然,也许我不知道的你的 Unity 咒语会保持所需的寿命......但是,你的实验结果表明不会......

于 2012-06-15T18:29:11.633 回答