news 2026/5/30 16:08:01

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/5/30 20:17:07

导师推荐10个AI论文写作软件,本科生轻松搞定毕业论文!

导师推荐10个AI论文写作软件&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;让毕业不再焦虑 对于许多本科生来说&#xff0c;撰写毕业论文是一项既重要又令人头疼的任务。从选题、收集资料到撰写初稿、反复修改&#xff0c;每一个环节都可能…

作者头像 李华
网站建设 2026/5/28 19:13:40

仪器仪表智能化以及接入MES流程

目录 一、核心理念&#xff1a;从“哑终端”到“智能节点” 二、仪器仪表智能化的四个层级 三、接入MES的完整流程与架构 流程步骤详解&#xff1a; 四、关键技术要点与挑战 五、价值与收益 总结 仪器仪表智能化及接入MES&#xff08;制造执行系统&#xff09;是智能制造…

作者头像 李华
网站建设 2026/5/28 12:50:30

HBase与Quarkus:Kubernetes原生Java

《HBase + Quarkus 实战:构建Kubernetes原生Java应用的最佳实践》 一、引言:传统Java与云原生的“矛盾”,如何破解? 作为Java开发者,你是否遇到过这样的痛点: 写了一个连接HBase的Java应用,本地运行没问题,但部署到Kubernetes后,启动要等好几秒,内存占用高达500MB+…

作者头像 李华
网站建设 2026/5/29 1:57:52

nodejs基于vue网上订餐系统的设计与实现_i23b2

文章目录基于 Node.js 和 Vue 的网上订餐系统设计摘要技术栈与核心功能系统亮点性能与扩展性--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于 Node.js 和 Vue 的网上订餐系统设计摘要 该系统采用前后端分离架构…

作者头像 李华
网站建设 2026/5/30 20:00:29

掌握技巧:彻底消除错误代码0x80004005带来的困扰

在数字时代&#xff0c;几乎每个人都会遇到计算机错误&#xff0c;这些错误有时会阻碍我们的工作&#xff0c;甚至影响日常生活。在众多令人困惑的错误代码中&#xff0c;0x80004005是一个特别常见但通常又难以理解的错误。这个错误代码通常表示未指定的错误&#xff0c;它可能…

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

nodejs基于vue电子产品商城销售网站的设计与实现

文章目录设计目标技术架构核心功能性能优化测试与部署--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;设计目标 该系统旨在构建一个基于Node.js和Vue.js的电子产品商城&#xff0c;实现用户注册登录、商品展示、购…

作者头像 李华