当前位置: 首页 > 知识库问答 >
问题:

Prism发布的事件未被订阅

长孙玉泽
2023-03-14

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

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

而我的subscribe事件如下所示:

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个答案

东郭自强
2023-03-14

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

 类似资料:
  • 我正试图开发一个Azure函数来处理由事件中心的捕获功能创建的blob。然而,尽管捕获blobs被正确地存储在容器中,但似乎没有< code>Microsoft。EventHub . capturefile created 事件发布到函数订阅。功能endpoint的事件订阅已创建,没有错误,Azure CLI的输出为 该函数的主体是一个标准的Http触发器,其中包含事件网格endpoint订阅所需

  • 我正在尝试添加一个搜索功能,在这个功能中,每当用户输入文本(一个字母接一个字母)时,网站都会向服务器发送一个收集信息的请求。对于这一点,我需要的是我假设的ContextChanged事件?我尝试过使用它,但活动无法启动。 还有我的代码: 你认为哪里不对?yall是否有比“ContextChanged事件”更好的解决方案来获得每次按键和搜索框?

  • 简介 Redis 的列表类型键可以用来实现队列,并且支持阻塞式读取,所以 Redis 能够非常容易的实现一个高性能的优先队列。同时在更高层面上,Redis 还支持“发布/订阅”的消息模式,可以基于此构建一个聊天系统。 发布示例 发布(Publish)即将消息发布到频道中。示例代码: // 发送消息 Redis::publish('chan-1', 'Hello, World!'); // 发送消息

  • 本文向大家介绍Jquery 自定义事件实现发布/订阅的简单实例,包括了Jquery 自定义事件实现发布/订阅的简单实例的使用技巧和注意事项,需要的朋友参考一下 Jquery 自定义事件实现发布/订阅的简单实例 以上这篇Jquery 自定义事件实现发布/订阅的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍ASP.NET Core实现单体程序的事件发布/订阅详解,包括了ASP.NET Core实现单体程序的事件发布/订阅详解的使用技巧和注意事项,需要的朋友参考一下 背景 事件发布/订阅是一种非常强大的模式,它可以帮助业务组件间实现完全解耦,不同的业务组件只依赖事件,只关注哪些事件是需要自己处理的,而不用关注谁来处理自己发布事件,事件追溯(Event Sourcing)也是基于事件发布/

  • 主要内容:发布/订阅流程,常用命令汇总,基本命令应用Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为  channel。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。 消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的