我们在使用wpf中自带的消息提示弹出框MessageBox.Show()十分笨拙,那么怎么去使用prism框架的发布订阅去实现消息提示呢?
1.创建一个类,继承接口PubSubEvent
/// <summary>
/// 发布订阅消息事件
/// </summary>
public class MsgEvent : PubSubEvent<string>
{}
2. 我们在前端wpf中定义一个消息提示控件
<!-- 显示错误提示 -->
<md:Snackbarx:Name="ShowErrMsg"Grid.ColumnSpan="2"VerticalAlignment="Top"MessageQueue="{md:MessageQueue}" />
3. 我们在前面wpf界面对应的后端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中
首先引用该事件,并在构造函数初始化(这是依赖注入的用法,不详细解释)
private readonly IEventAggregator _eventAggregator;
最后直接使用以下语句就可以成功实现
//Publish:向所有订阅了 MsgEvent 事件的监听者发送一条消息
_eventAggregator.GetEvent<MsgEvent>().Publish("请填写完整信息!");
5.效果展示