- 新建一个类继承PubSubEvent基类, 包含消息体和消息类型
public class MessageEvent:PubSubEvent<MessageModel> { } public class MessageModel { public object Message { get; set; } public MsgFilterEnum MsgFilter { get; set; } } public enum MsgFilterEnum { E_Main_Msg, E_Login, }
- 新建两个全局接口,订阅消息,发布消息
/// <summary> /// 注册提示消息 /// </summary> /// <param name="aggregator"></param> /// <param name="action"></param> public static void RegisterMessage(this IEventAggregator aggregator, Action<MessageModel> action, MsgFilterEnum filter = MsgFilterEnum.E_Main_Msg) { aggregator.GetEvent<MessageEvent>().Subscribe(action, ThreadOption.PublisherThread, true, (m) => { return m.MsgFilter.Equals(filter); }); } /// <summary> /// 发送提示消息 /// </summary> /// <param name="aggregator"></param> /// <param name="message"></param> public static void SendMessage(this IEventAggregator aggregator, object message, MsgFilterEnum filter = MsgFilterEnum.E_Main_Msg) { aggregator.GetEvent<MessageEvent>().Publish(new MessageModel() { MsgFilter = filter, Message = message ?? "", }); }
- 在使用的模块中引入IEventAggregator,用例
private IEventAggregator aggregator; public IndexViewModel(IEventAggregator aggregator, IContainerProvider provider):base(provider) { this.aggregator = aggregator; initModule(); } public void initModule() { //订阅测试项消息 DialogExtensions.RegisterMessage(this.aggregator, OnProgressChanged, MsgFilterEnum.E_Main_Msg); string data = "我想要个赞"; //发布消息 DialogExtensions.SendMessage(this.aggregator, data, MsgFilterEnum.E_Main_Msg); } private void OnProgressChanged(MessageModel obj) { Console.WriteLine(obj.Message); }
WPF IEventAggregator 模块消息订阅发布
最新推荐文章于 2024-10-16 10:33:19 发布