首页 > 其他分享 >8.Prism聚合器的使用IEventAggregator

8.Prism聚合器的使用IEventAggregator

时间:2024-02-10 09:22:05浏览次数:43  
标签:IEventAggregator 聚合 string aggregator Prism 事件 public

IEventAggregator 是一个事件聚合器,用于在不同模块之间进行通信。它允许模块之间进行解耦,通过发布和订阅事件来实现通信。

在使用 WPF prism IEventAggregator 时,你可以创建自定义事件,订阅事件并在需要时发布事件。这样可以实现模块之间的松耦合,提高代码的可维护性和可扩展性。

 

消息需要继承PubSubEvent

 /// <summary>
    /// 消息事件PubSubEvent<可以是值类型也可以是引用类型>
    /// </summary>
    public class MessageEvent : PubSubEvent<MessageModel>
    {
    }


    public class MessageModel
    {
        /// <summary>
        /// 模块
        /// </summary>
        public string Filter { get; set; }

        /// <summary>
        /// 内容
        /// </summary>
        public string Message { get; set; }
    }

 

聚合器方法

/// <summary>
    /// 事件聚合器方法
    /// </summary>
    public static class MessagerExtensions
    {
        /// <summary>
        /// 订阅
        /// </summary>
        /// <param name="aggregator">事件聚合器</param>
        /// <param name="action"></param>
        /// <param name="filterName"></param>
        public static SubscriptionToken ResgiterMessager(this IEventAggregator aggregator, Action<MessageModel> action, string filterName)
        {
            return aggregator.GetEvent<MessageEvent>().Subscribe(action, ThreadOption.PublisherThread, true, (p) =>
            {
                return p.Filter.Equals(filterName);
            });
        }

        /// <summary>
        /// 发布
        /// </summary>
        /// <param name="aggregator">事件聚合器</param>
        /// <param name="filterName">模块</param>
        /// <param name="messager">内容</param>
        public static void SendMessager(this IEventAggregator aggregator, string filterName, string messager)
        {
            aggregator.GetEvent<MessageEvent>().Publish(new MessageModel()
            {
                Filter = filterName,
                Message = messager
            });
        }

        /// <summary>
        /// 取消订阅
        /// </summary>
        /// <param name="aggregator">事件聚合器</param>
        /// <param name="subscriptionToken">订阅类型</param>
        public static void UnsubscribeMessager(this IEventAggregator aggregator, SubscriptionToken subscriptionToken)
        {
            aggregator.GetEvent<MessageEvent>().Unsubscribe(subscriptionToken);
        }

    }

 

使用:

  //订阅事件
            EventAggregator.ResgiterMessager(loginAtion, ViewNames.LoginView);





private void loginAtion(MessageModel obj)
        {
            if(IsHardwareInitialized)
            {
                NavigationParameters keyValues = new NavigationParameters();
                keyValues.Add("IndexViewKey", $"你好,现在时间{DateTime.Now.ToString("yyyy-MM-dd")}");

                ModuleManager.LoadModule(ModuleName.MainModuleProfile);//加载
                RegionManager.RequestNavigate(ContentControlName.MainWindowReginName, ViewNames.MainView, keyValues);//导航
            }
            else
            {
                PrismProvider.Dispatcher.Invoke(() =>
                {
                    //加载硬件初始化模块
                    PrismProvider.ModuleManager.LoadModule(ModuleName.InitializesModuleProfile);
                    //导航到主区域
                    PrismProvider.RegionManager.RequestNavigate(ContentControlName.MainWindowReginName, ViewNames.InitializesView);

                });

            }
        }

 

当发布消息的时候会执行loginAtion方法

_eventAggregator.SendMessager(ViewNames.LoginView, "登入成功");//发布

 

标签:IEventAggregator,聚合,string,aggregator,Prism,事件,public
From: https://www.cnblogs.com/MingQiu/p/18012743

相关文章

  • 链路聚合实验
    拓扑配置pc1pc2LSW1[SW1]intEth-Trunk1//创建一个逻辑口[SW1-Eth-Trunk1]modemanualload-balance//手工聚合模式(手动将成员接口加入),且开启负载均衡[SW1-Eth-Trunk1]trunkportg0/0/2//将物理接口绑定到逻辑口上[SW1-Eth-Trunk1]trunkportg0/0/3[SW1-Eth-Trunk1]......
  • 【论文笔记】用于遥感图像语义分割的几何边界引导特征融合与空间-语义上下文聚合技术
    作者:YupeiWang发表年代:2023使用的方法:边界指导、上下文聚合来源:IEEETIP方向:语义分割期刊层次:CCFA;计算机科学1区;IF13.3文献链接:https://doi.org/10.1109/TIP.2023.3326400WangY,ZhangH,HuY,etal.Geometricboundaryguidedfeaturefusionandspa......
  • 5.Prism对话框IDialogAware
    案例:项目添加Prism框架引用。1.添加对话框项目,添加一个用户控件ConfigView.xaml<UserControlx:Class="ConfigModule.Views.ConfigView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.micr......
  • 大厂聚合支付系统架构演进(上)
    0前言聚合支付主要是就是一个将所有的第三方支付,通过借助形式融合在一起,相当于对接一个支付接口,就可以使用各种支付的场景。如便利店购物,贴个码,上有微信支付,支付宝等各种支付。它主要是针对一个微小商户进行一个收款工具,让商家他那边会有一个收钱吧商户通,第一个可以实时的收听语音......
  • 短信聚合框架,帮您轻松集成多家短信服务 - 柠聚开发者平台:为开发提效
    让简单的事情回归简单的本质。柠聚开发者平台增加短信聚合功能,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。目前已接入数家常见的短信服务商,后续将会继续集成。前言在日常的开发过程中,短信的发送经常使用(尤其是中小型的外包公司),毕竟不是每个公司都有阿里腾讯一样的......
  • 短信聚合框架,帮您轻松集成多家短信服务 - 柠聚开发者平台:为开发提效
    让简单的事情回归简单的本质。柠聚开发者平台增加短信聚合功能,帮您轻松集成多家短信服务,解决接入多个短信SDK的繁琐流程。目前已接入数家常见的短信服务商,后续将会继续集成。前言在日常的开发过程中,短信的发送经常使用(尤其是中小型的外包公司),毕竟不是每个公司都有阿里腾讯......
  • H3C 链路聚合实验
    H3C链路聚合实验实验拓扑​​实验需求按照图示配置PC1和PC2的IP地址在SW1和SW2的两条直连链路上配置链路聚合,实现链路冗余,并可以增加传输带宽SW1和SW2之间的直连链路要配置为Trunk类型,允许所有vlan通过中断SW1和SW2之间的一条直连链路,测试PC1和PC2是否仍然能够继续访问......
  • Jmeter聚合报告
    聚合报告(AggregateReport),汇总响应信息,并提供请求计数、最小、最大、平均值、错误率、吞吐量等数据Label:标签,请求名称#Samples:样本数,具有相同标签的样本数量Average:平均数,一组结果的平均时间。时间以毫秒为单位Median:中位数,一组结果中间的时间。时间以毫秒为单位90%Line......
  • 2.Prism框架ModuleAttribute、IOC扩展、功能注册
    ModuleAttribute(按需延迟加载)ModuleAttribute是Prism框架中用于标识模块的属性。通过使用ModuleAttribute,可以将模块与特定的模块目录进行关联,从而使Prism应用程序能够动态加载和初始化模块。在使用WPFModuleAttribute时,需要将该属性应用于模块类,并指定模块的模块目......
  • 1.Prism框架介绍
    什么是Prism:1.WPFPrism是一个用于构建模块化、可扩展和可重用的WPF应用程序的框架。它基于MVVM模式,提供了一种简单且灵活的方式来管理复杂的WPF应用程序。2.Prism框架提供了一些核心概念,包括模块化开发、依赖注入、命令模式、导航和事件聚合等。它还提供了一些实用工具和类来简......