一、 发布订阅
- 新建订阅模型,新建一个Event文件夹,再新建一个类,用于存放订阅消息模型
- 此类继承PubSubEvent,T可以是其他类型,表示这个订阅发布或者接收到的对象类型,下面我定义了一个string的字符串消息对象类型
public class MessageEvent:PubSubEvent<string>
{
}
也可以是其他类型比如自定义类
public class MessageEvent2 : PubSubEvent<test>
{
}
public class test
{
public string Name { get; set; }
public int age { get; set; }
}
二、 发布订购取消订阅
- 在发布订阅的ViewModel类,构造函数添加参数IEventAggregator aggregator,声明一个全局变量來赋值
private IEventAggregator aggregator;
public ViewCViewModel(IEventAggregator aggregator)
{
this.aggregator=aggregator;
}
- 发布订阅,发布一个"Hello ning"字符串的定于,类型取决于MessageEvent,也就是我们第一步创建的订阅模型
aggregator.GetEvent<MessageEvent>().Publish("Hello ning");
3.订购订阅,同样在构造函数添加参数IEventAggregator aggregator,声明一个全局变量來赋值
private readonly IEventAggregator aggregator;
public ViewC(IEventAggregator aggregator)
{
InitializeComponent();
this.aggregator = aggregator;
//订购订阅
aggregator.GetEvent<MessageEvent>().Subscribe(SubMessage);
}
订购订阅,收到发布订阅后触发SubMessage方法
aggregator.GetEvent<MessageEvent>().Subscribe(SubMessage);
private void SubMessage(string obj)
{
MessageBox.Show(obj);
}
- 取消订阅,SubMessage方法是订阅是绑定的回调方法
aggregator.GetEvent<MessageEvent>().Unsubscribe(SubMessage);
private void SubMessage(string obj)
{
MessageBox.Show(obj);
}
下面是代码笔记
接收取消订阅笔记
using ModuleA.Event;
using Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ModuleA.Views
{
/// <summary>
/// ViewC.xaml 的交互逻辑
/// </summary>
public partial class ViewC : UserControl
{
private readonly IEventAggregator aggregator;
public ViewC(IEventAggregator aggregator)
{
InitializeComponent();
this.aggregator = aggregator;
//订阅,绑定SubMessage方法
aggregator.GetEvent<MessageEvent>().Subscribe(SubMessage);
}
private void SubMessage(string obj)
{
//收到发布的订阅后弹窗消息
MessageBox.Show(obj);
//取消绑定了SubMessage方法的订阅
aggregator.GetEvent<MessageEvent>().Unsubscribe(SubMessage);
}
}
}
发布订阅代码笔记
internal class ViewCViewModel
{
private IEventAggregator aggregator;
public ViewCViewModel(IEventAggregator aggregator)
{
this.aggregator=aggregator;
}
private void Save()
{
//发布订阅
aggregator.GetEvent<MessageEvent>().Publish("Hello ning");
}
}