Prism - 发布的事件未被订阅

时间:2016-12-25 06:18:09

标签: c# wpf prism

我在WPF中编写代码,我有两个视图模型。在一个视图模型中,我正在关闭一个棱镜弹出窗口,在关闭时我正在调用我的发布方法,如:

private void OnCancelInteraction()
{
   _eventAggregator.GetEvent<PubSubEvent>().Publish();
   this.FinishInteraction();
}

虽然我的订阅活动是这样的:

public ResidentListViewModel(IResidentService residentService, IUserService userService, IEventAggregator eventAggregator)
{
    var res =   eventAggregator.GetEvent<PubSubEvent>().Subscribe(InitializeCollectionView);
     _residentService = residentService;
     _userService = userService;
     _eventAggregator = eventAggregator;
     InitializeCollectionView();

     //***The InteractionRequest class 
     FormDialogOpenRequest = new InteractionRequest<INotification>();
     ConfirmationRequest = new InteractionRequest<IConfirmation>();

        //*** Commands for each of the buttons
     RaiseFormDialogOpenCommand = new DelegateCommand<object>(this.RaiseFormDialogOpen);
     aiseConfirmationCommand = new DelegateCommand<object>(this.RaiseConfirmation);
 }

以下是这两个类如何接收事件聚合器:

UnityContainer container = new UnityContainer();
var aggregator = container.Resolve<EventAggregator>();
this.DataContext = new ResidentFormDialogViewModel(residentService, userService, unitService, aggregator);

这是我的第二堂课:

UnityContainer container = new UnityContainer();
var aggregator = container.Resolve<EventAggregator>();
DataContext = new ResidentListViewModel(residentService, userService, aggregator);

每次取消我的互动时,发布都会被发布,但ResidentListViewModel不会被称为订阅。

ResidentListViewModel在具有subscribe方法的另一个类之前被调用。这可能是个问题吗?我想要的是在交互完成时初始化我的集合视图而不破坏MVVM模式?如果有任何其他方法,请建议。

1 个答案:

答案 0 :(得分:1)

确保将_eventAggregator对象配置为Singleton,并在两个视图模型中使用此单个实例。您的案例中的问题可能与用于发布和订阅事件的不同EventAggregator对象有关。