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("已完成!");
相关推荐
汇能感知2 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun2 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao2 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾2 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT3 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa3 小时前
HTML和CSS学习
前端·css·学习·html
ST.J3 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin4 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
看海天一色听风起雨落4 小时前
Python学习之装饰器
开发语言·python·学习
小憩-4 小时前
【机器学习】吴恩达机器学习笔记
人工智能·笔记·机器学习