Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 如果未加载viewmodel中事件的视图,则该事件的Subscribe方法未调用_Mvvm_Prism - Fatal编程技术网

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

Mvvm 如果未加载viewmodel中事件的视图,则该事件的Subscribe方法未调用,mvvm,prism,Mvvm,Prism,我有一个viewmodel,它正在订阅事件“NavigationCompletedEvent”。此viewmodel需要在没有视图的情况下加载到内存中。订阅事件的代码如下 var navigationCompletedEvent = eventAggregator.GetEvent<NavigationCompletedEvent>(); navigationCompletedEvent.Subscribe(OnNavigationCompleted, Thread

我有一个viewmodel,它正在订阅事件“NavigationCompletedEvent”。此viewmodel需要在没有视图的情况下加载到内存中。订阅事件的代码如下

 var navigationCompletedEvent = eventAggregator.GetEvent<NavigationCompletedEvent>();
        navigationCompletedEvent.Subscribe(OnNavigationCompleted, ThreadOption.UIThread);
var navigationCompletedEvent=eventAggregator.GetEvent();
navigationCompletedEvent.Subscribe(OnNavigationCompleted,ThreadOption.UIThread);
我已经在模块中明确创建了这个viewmodel的对象,如

 // Register other view objects with DI Container (Unity)
        var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
        container.RegisterInstance(typeof(ModuleCTaskButtonViewModel), 
            new ModuleCTaskButtonViewModel(), new ExternallyControlledLifetimeManager());
//向DI容器(Unity)注册其他视图对象
var container=ServiceLocator.Current.GetInstance();
container.RegisterInstance(typeof(ModuleCTaskButtonViewModel),
新的ModuleCaskButtonViewModel(),新的外部控制LifetimeManager());
但是,当我从其他viewmodule引发事件时,不会调用subscribe方法

如果视图也加载到内存中,它就可以正常工作。有什么想法吗?我怎样才能得到它


提前感谢。

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


虽然,也许你的统一咒语,我不知道,将维持所需的生命。。。但是,您的实验结果表明,不是…

订阅代码在哪里?在VM构造函数中?是的,它在从构造函数调用的initialize方法中。[Begin rant]:添加控制器类可以解决简单MVVM问题的另一种情况!控制器的生命周期可以是整个应用程序的生命周期,而不会有太多开销(因为它们主要是逻辑而不是数据)。ViewModels不应具有应用程序逻辑(如事件处理)![咆哮]谢谢。。这正是原因。我用错了人生管理器。