我们在使用wpf中自带的消息提示弹出框**MessageBox.Show()**十分笨拙,那么怎么去使用prism框架的发布订阅去实现消息提示呢?
1.创建一个类,继承接口PubSubEvent
cs
/// <summary>
/// 发布订阅消息事件
/// </summary>
public class MsgEvent : PubSubEvent<string>
{
}
- 我们在前端wpf中定义一个消息提示控件
XML
<!-- 显示错误提示 -->
<md:Snackbar
x:Name="ShowErrMsg"
Grid.ColumnSpan="2"
VerticalAlignment="Top"
MessageQueue="{md:MessageQueue}" />
- 我们在前面wpf界面对应的后端cs代码中订阅事件
cs
public partial class LoginUC : UserControl
{
private readonly IEventAggregator _eventAggregator;
public LoginUC(IEventAggregator eventAggregator)
{
InitializeComponent();
// 注册消息订阅
_eventAggregator = eventAggregator;
// Subscribe:将 Sub 方法注册为这个事件的订阅者。当有消息发布到这个事件时,已注册的所有订阅者都会被调用。
//获取的事件就是我们前面定义的 MsgEvent 事件
_eventAggregator.GetEvent<MsgEvent>().Subscribe(Sub);
}
/// <summary>
/// 订阅消息
/// MessageQueue:消息队列,用于存储消息。
/// Enqueue:将消息添加到队列的尾部。
/// </summary>
/// <param name="obj">接受订阅的消息</param>
private void Sub(string obj)
{
ShowErrMsg.MessageQueue.Enqueue(obj);
}
}
4.在我们需要使用的地方引入就行,我这里是在注册的ViewModel中
首先引用该事件,并在构造函数初始化(这是依赖注入的用法,不详细解释)
cs
private readonly IEventAggregator _eventAggregator;
最后直接使用以下语句就可以成功实现
cs
//Publish:向所有订阅了 MsgEvent 事件的监听者发送一条消息
_eventAggregator.GetEvent<MsgEvent>().Publish("请填写完整信息!");
5.效果展示