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

这篇具有很好参考价值的文章主要介绍了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给了我们很多的解决方案,但是其实我们只需要最简单又好用的解决方案即可。有了页面通讯,完全不需要路由通讯了。直接在页面跳转完成之后再页面通讯即可。统一而又优雅的解决方案才是我们需要的。文章来源地址https://www.toymoban.com/news/detail-607334.html

到了这里,关于WPF 如何设置全局的订阅发布事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • wpf 系统在显示器分辨率和缩放设置为非1920*1080和100%时,SelectionChanged事件响应问题分析?

    系统在显示器分辨率和缩放设置为1920*1080和100%时,窗口四分格能正常响应SelectionChanged事件,但是当缩放为125%时,或是分辨率大于1920*1080时四分格其中一个格子的下侧和右侧点击不响应,什么原因?   描述的问题可能由以下几个原因导致: 布局问题 : 在高分辨率或较高缩放

    2024年02月03日
    浏览(60)
  • 微信小程序全局事件订阅eventBus

    微信小程序全局事件订阅 在Vue开发中,我们可能用过eventBus来解决全局范围内的事件订阅及触发逻辑,在微信小程序的开发中我们可能也也会遇到同样的需求,那么我们尝试下在小程序(原生小程序开发)中实现类似eventBus的事件订阅功能。 全局事件订阅 全局实例 在Vue中我

    2024年02月12日
    浏览(33)
  • WPF实战学习笔记27-全局通知

    新建消息事件 添加文件:Mytodo.Common.Events.MessageModel.cs 注册、发送提示消息 UI增加Snackbar 修改文件:Mytodo.Views.MainView.xaml 注册消息 修改文件:Mytodo.Views.MainViewcs 构造函数添加 要注意的是,我们要发送的是文本,所以,this.skbar.MessageQueue.Enqueue函数内发送的是文本。 在需要的地

    2024年02月15日
    浏览(29)
  • WPF实战学习笔记31-登录界面全局通知

    UI添加消息聚合器 注册提示消息 文件:Mytodo.Views.LoginView.cs构造函数添加内容 在需要的地方添加提示消息 修改文件:Mytodo.ViewModels.LoginViewModel.cs

    2024年02月14日
    浏览(33)
  • WPF——事件绑定命令

    我们都知道WPF中的命令在结合MVVM模式的框架使用之后(框架重新实现了ICommand),可以解耦。但并不是所有控件都可以绑定命令的,比如TextBox、ComboBox等。在使用这类控件时,如果你想让它的某个事件激发时调用ViewModel中的方法,往往需要把ViewModel中的方法暴露给View,然后在

    2024年02月05日
    浏览(53)
  • 【WPF】附加事件

    Microsoft 官方概述:   附加事件可用于在非元素类中定义新的 路由事件 ,并在树中的任何元素上引发该事件。 为此, 必须将附加事件注册为路由事件 ,并提供支持附加事件功能的特定 支持代码 。 由于附加事件注册为路由事件,因此在元素树中引发时,它们会传播到元素

    2024年02月05日
    浏览(62)
  • 【WPF.NET开发】预览事件

    先决条件 预览标记为“已处理”的事件 通过控件解决事件禁止问题 预览事件,也称为隧道事件,是从应用程序根元素向下遍历元素树到引发事件的元素的路由事件。 引发事件的元素在事件数据中报告为Source 。 并非所有事件场景都支持或需要预览事件。 本文介绍了预览事件

    2024年02月03日
    浏览(40)
  • WPF 异步加载数据,窗体事件

    加载WPF界面时,需要获取数据,而数据返回的时间比较长,这个时候可以异步加载数据到界面。   1、首先在XAML中触发窗口载入事件  2、在后台代码中处理窗口载入事件 (1)找到主窗口类   (2)在MainWindow类中添加 XAML中加入的窗口载入事件   这个事件中可以放置各种界面

    2024年02月05日
    浏览(32)
  • WPF--关于Action事件小结

    WPF--关于Action事件小结 1.需要类实例去调用事件建立订阅关系         public event Actionint, object MaintainEvent;         new GP1().MaintainEvent += NormalCmdAction; 2.static用处--在不便实例的时候,可以直接由类调用         public static event Actionint, object MaintainEvent;         GP1.MaintainEvent +=

    2024年02月12日
    浏览(21)
  • WPF鼠标、键盘、拖拽事件、用行为封装事件

    本文主要介绍了WPF中常用的鼠标事件、键盘事件以及注意事项,同时使用一个案例讲解了拓展事件。除此之外,本文还讲述如何用行为(Behavior)来封装事件。 Windows中的事件通过消息机制来完成,也就是Windows系统来捕获用户输入(如鼠标点击、键盘输入),然后Windows发送一

    2024年01月23日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包