WPF 消息传递简明教程

WPF 消息传递简明教程

独立观察员 2023 年 4 月 24 日

cc21da3b499d3844af3f4a7ac15bb467.png

0、说明

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

使用包:CommunityToolkit.Mvvm(8.1.0)

1、订阅

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

4741903e4e932ef88de517bba9df586e.png

重写 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

解释:

2ebe2cb09534d38d36ab79399d97e7be.png

2、发送消息

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

3、注意事项

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

3.1、消息类型不要混用

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

4a8cb4a80136b56e2ffa3b954f589ef1.png

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

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

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

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

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

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

35f08348c065b7fdae1ea718f6a4454d.png

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 图表控件使用备忘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61425.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware官网注册账号之验证码问题

VMware官网注册账号之验证码问题 首先上个官网注册账号链接&#xff5e; https://my.vmware.com/zh/web/vmware/registration 点我访问官网注册 然后不出意外都会看见中文版页面 这时候不要着急注册&#xff0c;因为你会发现验证码是这个造型的 抓狂的时候来了&#xff0c;不…

ChatGpt3.5 使用小记001

使用了一段时间的ChatGpt。主要的用途是向它咨询些学习的问题。因为有些它的分类是对话形式的&#xff0c;所以&#xff0c;一定问题多了&#xff0c;自己都不好找。故此想稍做整理&#xff0c;在此留存。 1.英语学习类 英语单词类&#xff0c;主要是因为有些近义词在中文的翻…

chatgpt赋能Python-python3_5怎么打开

Python 3.5怎么打开&#xff1f;教你几种方法 Python是目前非常流行的一种编程语言&#xff0c;几乎在所有行业都得到了广泛的应用。Python非常容易上手&#xff0c;且有强大的数据处理和科学计算能力。现在我们来说一下&#xff0c;如何在您的计算机上打开Python 3.5。 方法…

python-openCV实现银行卡卡号识别

实现效果&#xff1a; code import cv2 as cv import numpy as np# 轮廓排序 默认从左到右 # --cnts 待排序的轮廓列表 # --method 排序方法 自上而下&#xff0c;从左到右等 def sort_contours(cnts, method"left-to-right"):# 初始化反向标志和排序索引reverse F…

opencv之银行卡号识别

1.项目背景 1.1 项目介绍 这个一个opencv的经典应用,所以用它来熟悉之前的一些操作。 1.2 项目目的 通过此程序可以识别出银行卡图片中包括的银行卡卡号。 2.项目介绍 此项目主要分为两部分:模板图片处理,银行卡图片处理。 模板图片: 银行卡图片示例: 2.1 模板图片处…

【OpenCV】银行卡号识别

文章目录 前言一、环境二、代码总结 前言 本文引用其他作者代码&#xff0c;本文仅供记录用。详细内容可看此处 一、环境 如果提示没有imutils模块就pip install imutils 提供一个字体模板文件和银行卡图片。可以右键保存。 字体模板文件&#xff1a; 银行卡图片&#xff1b…

opencv-python 银行卡卡号识别

模板&#xff1a; 银行卡&#xff1a; 主要思路&#xff1a;用遮盖法 将无关紧要的上面和下面部分截掉&#xff0c;保留银行卡号差不多的位置&#xff0c;然后用opencv做图像处理&#xff0c;得到四个 连着数字的小框框&#xff0c;然后再在四个小框框里面提取出每一个单个的…

使用 OpenCV 和 Python 识别信用卡号

使用 OpenCV 和 Python 识别信用卡号 在之前的博文中&#xff0c;我们学习了如何安装 Tesseract 二进制文件并将其用于 OCR。 然后我们学习了如何使用基本的图像处理技术来清理图像以提高 Tesseract OCR 的输出。 但是&#xff0c;不应将 Tesseract 视为能够获得高精度的光学…

OpenCV-Python 模板匹配的银行卡号识别

目录 实现流程模板数字处理对模板图片进行二值化处理对二值化后的图片进行轮廓检测确定每个模板数字的图像 银行卡图片处理预处理确定每组数字轮廓检测每个数字提取数字组中的数字 模板匹配附录完整代码 实现流程 对数字模板进行处理&#xff0c;提取出单一数字的图片&#xf…

银行卡验证接口API(仅需一行代码,实现全国银行卡核验)

银行卡确认在互联网越来越普及&#xff0c;在二手、电商、贷款、等主流互联网应用中都有明确的刚需&#xff0c;传统的 银行卡核验方式是用户上传图片&#xff0c;客服后台人肉审核&#xff0c;但问题在于根本无从确认 银行卡的真实性&#xff0c;也不能确认该 银行卡持有人和身…

openCV+Python实战练习——银行卡号识别

目录 项目Introduce&#xff1a; 项目名称&#xff1a; 具体操作步骤以及代码&#xff1a; 实现结果展示&#xff1a; 代码整体展示&#xff1a; 项目Introduce&#xff1a; 项目名称&#xff1a; 通过导入模板数字&#xff0c;对银行卡面上的数字进行识别&#xff0c;提…

【opencv学习】银行卡的识别

今天做一个小项目&#xff0c;运用已经学到的知识&#xff0c;做一个银行卡的识别。 银行卡的图像如下 这个银行卡是的数字模板是 现在我的任务是识别中间的16个数字 大致思路是&#xff1a; 1&#xff1a;读取模板&#xff0c;获得每个数字的模板信息 2&#xff1a;读取银行…

OpenCV C++案例实战二十《银行卡号识别》

OpenCV C案例实战二十《银行卡号识别》 前言一、获取模板图像1.1 功能效果1.2 功能源码 二、银行卡号定位2.1 将银行卡号切割成四块2.1.1 功能效果2.1.2 功能源码 2.2 字符切割2.2.1 功能效果2.2.2 功能源码 三、字符识别3.1.读取文件3.2.字符匹配3.3.功能源码 四、效果显示4.1…

opencv实际案例(一)银行卡号的识别

一、目标&#xff1a; 识别银行卡上的卡号 二、思路&#xff1a; 一 、准备模板&#xff0c;能够与卡号数字样式进行模型匹配 二、处理模板图片&#xff1a;将其分割成为单个数字的图片&#xff0c;和所对应的数字相匹配存储可迭代的数据类型中。 读入模板图片&#xff0…

(openCV--python)检测银行卡号 (应用篇)(包含模板图)

适合人群&#xff1a; 有python基础&#xff0c;注重应用、不追求深层次知识的小伙伴。前言&#xff1a; 本文对很多说用到的很多函数都是粗浅地解释一下用法以及作用&#xff0c;并不会解释该函数的具体结构。若想进一步深入了解还请自行谷狗一下。 完整代码 # Author :Eri…

opencv项目实践二(银行卡卡号识别)

任务说明 将银行卡卡号打印输出 实现 一、思路 1、定位银行卡卡号数字区域 2、将银行卡每个卡号数字单独提取出来 3、处理模板图片&#xff0c;将每个模板数字单独提取出来 4、通过模板匹配来识别每个卡号 二、具体代码实现 1、处理模板 卡号数字模板 # 读取模板图片 img_…

CVAT——2. CVAT简单使用

文章目录 基本使用管理员界面登录管理用户添加/删除用户及用户权限管理组管理 任务管理 创建任务和上传标签datumaroanaconda安装datumaro安装datumaro基本使用支持的格式查看帮助文件报错导入projects数据增加 数据标注标注面板使用快捷键左侧工具栏和右侧面板说明追踪模式Tra…

OpenCV图像处理——(实战)信用卡识别

总目录 图像处理总目录←点击这里 十四、信用卡数字识别 识别的图片模板图片 14.1、模板图片处理 读入图片->灰度图->二值图->计算轮廓->存储每一个模板 如果是所需模板匹配只有一个&#xff0c;课直接读入灰度图像即可 这里有10个模板(0-9)&#xff0c;所以需…

关于opencv的实战——银行卡号识别

首先我们先来引入我们所需要的库和我们定义的图像显示&#xff08;方便&#xff09;&#xff1a; import cv2 import numpy as np import imutils from imutils import contours#显示图像 def cv_show(img,name"image"):cv2.imshow(name,img)cv2.waitKey(0)cv2.dest…

13- 信用卡账号识别 (OpenCV基础) (项目十三) *

项目要点 _, ref cv2.threshold(ref, 10, 255, cv2.THRESH_BINARY_INV) 二值化处理图片, 黑白化图片ref cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 灰度化处理ref_contours, _ cv2.findContours(ref.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 计算轮廓cv2.dr…