当前位置: 首页 > news >正文

WPF 如何设置全局的订阅发布事件

文章目录

  • 前言
  • 代码
    • 逻辑修改
  • 总结

前言

我们需要一个全局事件订阅发布功能,实现页面通讯。使两个毫无关系的页面通过一个中间量进行通讯。

代码

IEventAggregator:消息订阅集合

这个是Prism提供的消息订阅功能。使用如下

设置订阅类型,即关键字

PubSubEvent<><>里面存放的是订阅的数据类型,推荐使用元祖
///
public class EventClass : PubSubEvent<string>
{}

官方案例,在ViewModel中使用


private readonly IEventAggregator eventAggregator;public string MyTitle { get; set; }public ViewAViewModel(IEventAggregator eventAggregator){//通过Prism注入得到this.eventAggregator = eventAggregator;//订阅eventAggregator.GetEvent<EventClass>().Subscribe(res =>{Debug.WriteLine(res.ToString());});//推送eventAggregator.GetEvent<EventClass>().Publish("我是侧边栏传来的值:事件通知");}

Tips:订阅中传递的值和EventClass: PubSubEvent<string> 中<>设置的类型有关。

但是经过我的测试,好像不能跨页面进行通讯。

逻辑修改

    public partial class App{//在App.xaml中进行声明public static IEventAggregator EventAggregator { get;set; } = new EventAggregator();}

对应每个xxxView页面,都定义一个xxxViewEvent。

在每个ViewModel的构造函数中订阅自己的ViewEvent,这样别的页面直接对该Event进行推送即可达到路由传值。通过key,value的形式对返回值进行解析。

演示事例

public ViewAViewModel(IEventAggregator eventAggregator){App.EventAggregator.GetEvent<ViewAEvent>().Publish("我是ViewModel传来的值");App.EventAggregator.GetEvent<ViewAEvent>().Subscribe(res =>{Debug.WriteLine(res.ToString());MyTitle = res;});}

总结

Prism和WPF给了我们很多的解决方案,但是其实我们只需要最简单又好用的解决方案即可。有了页面通讯,完全不需要路由通讯了。直接在页面跳转完成之后再页面通讯即可。统一而又优雅的解决方案才是我们需要的。

http://www.lryc.cn/news/95369.html

相关文章:

  • STM32 USB使用记录:HID类设备(前篇)
  • 探索AI图像安全,助力可信AI发展
  • vue 学习笔记 【ElementPlus】el-menu 折叠后图标不见了
  • 【JavaEE初阶】HTTP协议
  • 基于SaaS模式的Java基层卫生健康云HIS系统源码【运维管理+运营管理+综合监管】
  • effective c++ 条款2
  • Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】
  • html基于onmouse事件让元素变颜色
  • Linux环境PostgreSQL安装
  • Rust 数据类型 之 结构体(Struct)
  • 数据结构之Queue的实现
  • rust声明式宏
  • 第二章:Learning Deep Features for Discriminative Localization ——学习用于判别定位的深度特征
  • 【CSS】box-shadow 属性
  • 基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)
  • Mysql错误日志、通用查询日志、二进制日志和慢日志的介绍和查看
  • 【Linux】Tcp服务器的三种与客户端通信方法及守护进程化
  • 【Spring Cloud】git 仓库新的配置是如何刷新到各个微服务的原理步骤
  • 三,创建订单微服务消费者 第三章
  • 【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组2
  • 【C#】微软的Roslyn 是个啥?
  • 两个小封装电机驱动芯片:MLX813XX、A4950
  • 数据结构【绪论】
  • 掌握无人机遥感数据预处理的全链条理论与实践流程、典型农林植被性状的估算理论与实践方法、利用MATLAB进行编程实践(脚本与GUI开发)以及期刊论文插图制作等
  • Angular中组件设计需要注意什么?
  • 电容触摸屏(TP)的工艺结构
  • Qt小妙招:如何在可执行文件生成后,在pro文件中添加其他命令操作?
  • 做好防雷检测的意义和作用
  • 计算机启动过程uefi+gpt方式
  • 探索容器镜像安全管理之道