news 2026/2/19 7:22:18

VM访问View(Interaction)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VM访问View(Interaction)

引言

ViewModel访问View的场景非常常见,比如打开关闭窗口,访问剪切板等等,想操作前端View的一些功能和属性必须要View的引用。这里介绍一种非常高效的方式与View进行交互。当然有很多方式,比如回调函数、CommunityToolkit.MVVM的Messenger等

1、Interaction

相当于统一格式了,支持任意消息类型订阅处理。包含入参和返回值

public class Interaction<TIn, TOut> { private Func<TIn, Task<Tout>>? _handler; public void RegisterHandler(Func<TIn, Task<TOut>> handler) { ArgumentNullException.ThrowIfNulL(handler); handler = handler; } public async Task<Tout> Handle(TIn input) { if(handler =null) throw new InvalidoperationException("No handler registered."); return await _handler(input); } } public readonly struct Unit { public static readonly Unit Default = default; public override int GetHashCode() => 0; public override bool Equals(object? obj) => obj is Unit; }

1.1、VM中使用

这样再在ViewModel中声明一个实例使用:

public Interaction<Unit,string> RequestMessageInteraction{get;} = new(); [RelayCommand] private async Task UseInteraction() { IsBusy = true; Message = await RequestMessageInteraction.Handle(Unit.Default); IsBusy = false; }

1.2、View中订阅

public MainWindow() { InitializeComponent(); var viewModel = new MainViewModel(); this.DataContext = viewModel; viewModel.RequestMessageInteraction.RegisterHandler(async _ => { await Task.Delay(2000); return "Hello from MainWindow with Interaction!"; }); }

一般通过依赖注入进行VM的实例设置,这里简单实例化了一个MainViewModel。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 1:05:31

一道“找数”的题,为什么能成为算法世界的常青树?

一道“找数”的题,为什么能成为算法世界的常青树? 从 Missing Number 说起 一、引子:这题你肯定见过,但你真的“理解”了吗? 很多人第一次见到这道题,心里都会冒出一句话: “这也叫算法题?小学数学吧?” 题目很简单: 给你一个包含 0 ~ n 中 n 个不同数字 的数组, …

作者头像 李华
网站建设 2026/2/17 5:29:56

.nvue页面实现画笔绘制功能,用原生html导入nvue页面使用还可以截图(画笔 清空 橡皮擦 改颜色 禁用画笔 截图-是视频画面加绘制合成一张图片截图)-我花80块钱找淘宝都没弄出来,自己写的

功能 安卓app上面nvue 视频上方绘制&#xff08;vue2&#xff09;①新建一个draw.html文件&#xff08;里面功能有画笔 清空 橡皮擦 改颜色 禁用画笔 截图-是视频画面加绘制合成一张图片截图&#xff09;②webViewUrl: /static/draw.html,③<!-- 画布 绘制层 --><web-…

作者头像 李华
网站建设 2026/2/6 23:57:02

小学生的题:求桌子多高

设桌子的高度为 h 厘米&#xff0c;坐着的猫高度为 a 厘米&#xff0c;趴着的猫高度为 b 厘米。根据图中的信息&#xff0c;我们可以得到两个方程&#xff1a;ha−bhb−a​11&#xff08;左图&#xff1a;桌子高度 坐猫高度 - 趴猫高度 11&#xff09;7&#xff08;右图&…

作者头像 李华
网站建设 2026/2/7 10:31:15

nodejs基于vue的数据库课程知识点在线教学网站系统_70teu

文章目录系统概述技术架构核心功能实现示例扩展性--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 Node.js与Vue.js结合的在线教学网站系统&#xff0c;专为数据库课程设计&#xff0c;提供知识点学习、交…

作者头像 李华
网站建设 2026/2/8 1:24:17

YOLOv8目标检测:从理论到实战的飞跃之旅

目录一、YOLOv8&#xff0c;目标检测的新宠儿二、YOLOv8 核心探秘2.1 架构解析2.2 工作流程2.3 优势剖析三、实战项目开启3.1 环境搭建3.2 数据准备3.3 模型训练3.4 模型评估3.5 推理应用四、实战案例展示4.1 工业质检实例4.2 智能安防应用五、常见问题与解决方案5.1 显存不足5…

作者头像 李华