百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

WPF 消息传递简明教程 wpf 发布

zhezhongyun 2024-12-28 16:46 65 浏览

WPF 消息传递简明教程

独立观察员 2023 年 4 月 24 日


0、说明

参考:https://www.cnblogs.com/cdaniu/p/16852620.html

使用包:CommunityToolkit.Mvvm(8.1.0)


1、订阅

让需要使用消息的 ViewModel 继承 ObservableRecipient,构造函数中设置 IsActive=true:


重写 OnActivated () 和 OnDeactivated () 方法:

#region 消息处理
/// <summary>/// 注册消息接收 /// </summary>protected override void OnActivated(){ WeakReferenceMessenger.Default.Register<MainWindowViewModel, MyMessage, string>(this, nameof(MyMessage), OnReceiveMessage);}
/// <summary>/// 收到消息时的处理方法/// </summary>/// <param name="recipient">接收者</param>/// <param name="message">消息</param>private void OnReceiveMessage(MainWindowViewModel recipient, MyMessage message){ //处理逻辑;}
/// <summary>/// 注销消息接收/// </summary>protected override void OnDeactivated(){ base.OnDeactivated(); WeakReferenceMessenger.Default.Unregister<MyMessage, string>(this, nameof(MyMessage));}
#endregion


解释:


2、发送消息

var message = new MyMessage(){ //属性赋值,};WeakReferenceMessenger.Default.Send(message, nameof(MyMessage));


3、注意事项

主要用法就是上面两点,还是挺简单的,但是网上的文章却看得人云里雾里的。这一节说一些注意事项。


3.1、消息类型不要混用

消息类应当是每个消息专用的,推荐使用 sealed 标记:


3.2、订阅要在发送之前执行

这一条大家可能会觉得这有什么好提醒的,本来就要这样啊。但是,实际写的时候,还是容易发生执行到发送的逻辑时,订阅的那部分代码实际还没执行,通常就是那个 ViewModel 还没出生呢。不过这个也很好排查出来,一般出现发了消息,但是消息处理方法那里没反应,就是这个问题了。解决方法就是让订阅的对象先生成出来即可,只不过有的时候这样可能没什么道理,大家有更好的方法,欢迎交流。


就说这么多吧,感谢阅读。



原创文章,转载请注明: 转载自 独立观察员 (dlgcy.com)

本文链接地址:[WPF 消息传递简明教程](http://dlgcy.com/toolkit-mvvm-message/)

关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章



WPF

WPF 属性变动后的业务处理及恢复原始值的方法

我向 ChatGPT 讨教了一下 WPF 中的行为 Behavior

使用通用附加属性来减少 WPF 元素自定义样式的多余代码

几十款 WPF 控件 - UI 库,总有一款适合你

WPF 用户控件分享之边上带输入框的圆圈

分享一个 WPF 气泡弹框

WPF 表单验证之 INotifyDataErrorlnfo 接口的使用示例

[翻译] WPF 中用户控件 DataContext/Binding 和依赖属性的问题

OxyPlot 导出图片及 WPF 元素导出为图片的方法

让 WPF 的 RadioButton 支持再次点击取消选中的功能

WPF DataGrid 如何将被选中行带到视野中

WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题

WPF DataGrid 通过自定义表头模拟首行固定

WPF ComboBox 使用 ResourceBinding 动态绑定资源键并支持语言切换

【翻译】WPF 中附加行为的介绍 Introduction to Attached Behaviors in WPF

WPF 使用 Expression Design 画图导出及使用 Path 画图

WPF MVVM 弹框之等待框

解决 WPF 绑定集合后数据变动界面却不更新的问题(使用 ObservableCollection)

WPF 消息框 TextBox 绑定新数据时让光标和滚动条跳到最下面

真?WPF 按钮拖动和调整大小

WPF MVVM 模式下的弹窗

WPF 让一组 Button 实现 RadioButton 的当前样式效果

WPF 原生绑定和命令功能使用指南

WPF 用户控件自定义依赖属性MVVM 模式下的使用备忘

在WPF的MVVM模式中使用OCX组件


第三方库使用

WPF 依赖注入之 Microsoft.Extensions.DependencyInjection

WPF 表格控件 ReoGrid 的简单使用

OxyPlot.WPF 公共属性一览

OxyPlot.Wpf 图表控件使用备忘


相关推荐

Go语言标准库中5个被低估的强大package

在Go语言的世界里,开发者们往往对fmt、net/http这些“明星包”耳熟能详,却忽略了标准库里藏着的一批“宝藏工具”。它们功能强大却低调内敛,能解决并发控制、内存优化、日志管理等核心问题。今天就带...

作为测试人,如何优雅地查看Log日志?

作为一名测试工程师,测试工作中和Linux打交道的地方有很多。比如查看日志、定位Bug、修改文件、部署环境等。项目部署在Linux上,如果某个功能发生错误,就需要我们去排查出错的原因,所以熟练地掌握查...

Java 从底层与接口实现了解String、StringBuffer、StringBuilder

String、StringBuffer和StringBuilder的接口实现关系:String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。用于存放字符...

FluentData 从入门到精通:C#.NET 数据访问最佳实践

简介FluentData是一个微型ORM(micro-ORM),主打「FluentAPI」风格,让开发者在保持对原生SQL完全控制的同时,享受链式调用的便捷性。它与Dapper、Massi...

团队协作-代码格式化工具clang-format

环境:clang-format:10.0.0前言统一的代码规范对于整个团队来说十分重要,通过git/svn在提交前进行统一的ClangFormat格式化,可以有效避免由于人工操作带来的代码格式问题。C...

C# 数据操作系列 - 15 SqlSugar 增删改查详解(超长篇)

0.前言继上一篇,以及上上篇,我们对SqlSugar有了一个大概的认识,但是这并不完美,因为那些都是理论知识,无法描述我们工程开发中实际情况。而这一篇,将带领小伙伴们一起试着写一个能在工程中使用的模...

Mac OS 下 Unix 使用最多的100条命令(收藏级)

MacOS内置基于Unix的强大终端(Terminal),对开发者、运维工程师和日常用户来说,掌握常用的Unix命令是提升效率的关键。本文整理了100条在MacOS下最常用的U...

C语言字符串操作总结大全(超详细)

C语言字符串操作总结大全(超详细)1)字符串操作strcpy(p,p1)复制字符串strncpy(p,p1,n)复制指定长度字符串strcat(p,p1)附加字符串strncat...

经常使用到开源的MySQL,今天我们就来系统地认识一下

作为程序员,我们在项目中会使用到许多种类的数据库,根据业务类型、并发量和数据要求等选择不同类型的数据库,比如MySQL、Oracle、SQLServer、SQLite、MongoDB和Redis等。今...

电脑蓝屏代码大全_电脑蓝屏代码大全及解决方案

0X0000000操作完成0X0000001不正确的函数0X0000002系统找不到指定的文件0X0000003系统找不到指定的路径0X0000004系统无法打开文件0X0000005拒绝...

8个增强PHP程序安全的函数_php性能优化及安全策略

安全是编程非常重要的一个方面。在任何一种编程语言中,都提供了许多的函数或者模块来确保程序的安全性。在现代网站应用中,经常要获取来自世界各地用户的输入,但是,我们都知道“永远不能相信那些用户输入的数据”...

css优化都有哪些优化方案_css性能优化技巧

CSS优化其实可以分成几个层面:性能优化、可维护性优化、兼容性优化以及用户体验优化。这里我帮你梳理一份比较系统的CSS优化方案清单,方便你参考:一、加载性能优化减少CSS文件体积压缩CSS...

筹划20年,他终于拍成了这部电影_筹划20年,他终于拍成了这部电影英语

如果提名好莱坞最难搞影星,你第一时间会联想到谁?是坏脾气的西恩·潘,还是曾因吸毒锒铛入狱的小罗伯特·唐尼,亦或是沉迷酒精影响工作的罗素·克劳?上述大咖,往往都有着这样或那样的瑕疵。可即便如此,却都仍旧...

Keycloak Servlet Filter Adapter使用

KeycloakClientAdapters简介Keycloakclientadaptersarelibrariesthatmakeitveryeasytosecurea...

一些常用的linux常用的命令_linux常用命令有哪些?

在Linux的世界里,命令是与系统交互的基础。掌握常用命令不仅能让你高效地管理文件、进程和网络,还能为你进一步学习系统管理和自动化打下坚实的基础。本文将深入探讨一些最常用且功能强大的Linux...