Mvvm 如果未加载viewmodel中事件的视图,则该事件的Subscribe方法未调用
我有一个viewmodel,它正在订阅事件“NavigationCompletedEvent”。此viewmodel需要在没有视图的情况下加载到内存中。订阅事件的代码如下Mvvm 如果未加载viewmodel中事件的视图,则该事件的Subscribe方法未调用,mvvm,prism,Mvvm,Prism,我有一个viewmodel,它正在订阅事件“NavigationCompletedEvent”。此viewmodel需要在没有视图的情况下加载到内存中。订阅事件的代码如下 var navigationCompletedEvent = eventAggregator.GetEvent<NavigationCompletedEvent>(); navigationCompletedEvent.Subscribe(OnNavigationCompleted, Thread
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不应具有应用程序逻辑(如事件处理)![咆哮]谢谢。。这正是原因。我用错了人生管理器。