WPF实战学习笔记27-全局通知

新建消息事件

添加文件:Mytodo.Common.Events.MessageModel.cs

c# 复制代码
using Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Diagnostics;

namespace Mytodo.Common.Events
{
    public class MessageModel
    {
        public string Filter { get; set; }
        public string Message { get; set; }
    }
    public class MessageEvent:PubSubEvent<MessageModel>
    {
    }
}

注册、发送提示消息

c# 复制代码
/// <summary>
/// 注册提示消息 
/// </summary>
/// <param name="aggregator"></param>
/// <param name="action"></param>
public static void ResgiterMessage(this IEventAggregator aggregator,
                                   Action<MessageModel> action, string filterName = "Main")
{
    aggregator.GetEvent<MessageEvent>().Subscribe(action,
                                                  ThreadOption.PublisherThread, true, (m) =>
                                                  {
                                                      return m.Filter.Equals(filterName);
                                                  });
}

/// <summary>
/// 发送提示消息
/// </summary>
/// <param name="aggregator"></param>
/// <param name="message"></param>
public static void SendMessage(this IEventAggregator aggregator, string message, string filterName = "Main")
{
    aggregator.GetEvent<MessageEvent>().Publish(new MessageModel()
                                                {
                                                    Filter = filterName,
                                                    Message = message,
                                                });
}

UI增加Snackbar

修改文件:Mytodo.Views.MainView.xaml

xaml 复制代码
</materialDesign:DrawerHost.LeftDrawerContent>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition />
    </Grid.RowDefinitions>
    <materialDesign:Snackbar
                             x:Name="skbar"
                             Panel.ZIndex="1"
                             MessageQueue="{materialDesign:MessageQueue}" />
    <materialDesign:ColorZone

注册消息

修改文件:Mytodo.Views.MainViewcs 构造函数添加

要注意的是,我们要发送的是文本,所以,this.skbar.MessageQueue.Enqueue函数内发送的是文本。

c# 复制代码
aggregator.ResgiterMessage(arg =>
                           {
                               this.skbar.MessageQueue.Enqueue(arg.Message);
                           });

在需要的地方推送消息

c# 复制代码
aggregator.SendMessage("已完成!");
相关推荐
casual~28 分钟前
十六届蓝桥杯国赛个人题解
经验分享·学习·算法·蓝桥杯
小陈phd31 分钟前
多模态大模型学习笔记(四十六)——图像-文本生成(Image-Text Generation):跨模态创作与语义互通
笔记·学习·计算机视觉
噜噜噜阿鲁~32 分钟前
python学习笔记 | 11.4、面向对象高级编程-定制类
笔记·python·学习
CanCanCanedFish35 分钟前
Transformer论文阅读笔记:从注意力机制到革命性架构的启示
论文阅读·笔记·transformer
wangcheng30344 分钟前
LLMOps入门:高效管理大型语言模型
笔记
ZzYH221 小时前
文献阅读 260602-A universal scaling law of intra-urban inequality
笔记
Niyy_1 小时前
WASM 的使用笔记
jvm·笔记·wasm
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇) 第五篇:SAP 报表多格式输出:Excel/PDF 批量导出功能实现
学习·性能优化·pdf·excel·sap·abap
凯尔萨厮1 小时前
Hibernate(学习笔记)
笔记·学习·hibernate
lunzi_08261 小时前
【学习笔记】《Python编程 从入门到实践》第5章:if语句、条件测试与列表处理实战
笔记·python·学习