当前位置: 首页 > news >正文

关于响应式编程框架ReactiveUI的感悟

1.我第一个接触的MVVM框架是Caliburn Micro,后来接触到了ReactiveUI这种响应式编程思想的框架,主要说一下本人目前学习感想(针对尽快上手使用MVVM开发WPF);

首当其冲的工具是DeepSeek,总结好问题直接提问,可以快速地给到我们参考案例,自己再根据给的案例逻辑进行复制使用,逐步优化,可以实现基本的功能需求;

但是仅仅参考DeepSeek去开发的话,后期一些细节上的问题暴露出来感觉会很难去排查,这个时候就得去搜索其他资源,简单的就是一些博客文章,技术科普、视频讲解之类的,但是我发现网上关于ReactiveUI的分享博客很少(比着Prism等其他框架而言),这个时候在去百度搜索相关字眼,慢慢筛选质量比较好的文章一般就是翻译来的了,但是与我想要查找的知识点对准度不是很高,但是也能学到一些思路;

其实,官网一直是最好的学习工具。

举个例子来说:

我想在这个框架中实现绑定前端按钮的鼠标左键按下事件,然后我去询问DP,他也很给力的给出了以下代码:

this.WhenActivated(a => {
//绑定鼠标按下事件
Observable.FromEventPattern<MouseButtonEventHandler, MouseButtonEventArgs>(h => btn_PositiveRelative.PreviewMouseDown += h,h => btn_PositiveRelative.PreviewMouseDown -= h).Select(ep => new MouseCommandArgs{Sender = ep.Sender,EventArgs = ep.EventArgs}).InvokeCommand(ViewModel, vm => vm.MouseDownCommand).DisposeWith(a);
});

(其中的MouseCommandArgs类是他让我定义在ViewModel中用来承接参数的,其中的Select函数作用就是生成方法参数传递到后台)

当时不知到DP是怎么学到这些代码的,就去官网搜了一下相关字眼:

然后慢慢找,在使用手册的事件一栏中找到了对应代码案例:

但是我想找的是如何绑定控件的鼠标按下或者抬起的事件如何做绑定,不是Command默认的Click事件,就接着往下看;

结合自身对WPF的理解,看到这里画圈的第三点和给出的XAML代码中的EventName="Tapped"字眼,隐约感觉到就在附近了。

注意看给出的CS代码中的注释:// Use any of reactive extensions operators here!

翻译过来是://在这里使用任何响应式扩展操作符!

先不管,继续往下看:

靠,这不就是DP给的写法吗,翻译一下,发现这些就是Rx.Net的内容了,继续点击进去看一下;

 

 根据上下文和对应的注释慢慢去理解,Select是用来提取参数,在回到代码进到定义:

实际上Select函数是 IObservable<TSource>的扩展方法,类似于Linq中的select,可以便捷使我们的对List中(在这里是数据流)的每一项进行操作,生成新的列表;所以,Rx.官网中的下面代码就是生成一个事件参数流,当有事件产生时,就会提取出对应的参数,就会反馈到这个事件流,让他流动,如果这个事件流后面被订阅了,就可以触发到对应的订阅方法上。

然后再结合ReactiveUI官网中给出的:

根据Select的位置就可以拼接成DP 给的代码案例了。

总结一下就是利用Rx.Net创造事件(参数)流,这个流再使用ReactiveUI的InvokeCommand激发到ViewModel中定义的命令上。

至此,先告一段落,我写这些的意义是想表述官网的重要性。

也声明一下,我是个菜鸟,如有异议,欢迎沟通,一起探讨。

相关文章:

  • 【Netty篇】Netty的线程模型
  • 【北交互联-注册/登录安全分析报告】
  • 【Qt】Qt 信号与槽机制全解析
  • [react 18+] 定义页面组件时的三种申明区分
  • 定义AIDL 接口
  • 前端 React 弹窗式 滑动验证码实现
  • 【教程】PyTorch多机多卡分布式训练的参数说明 | 附通用启动脚本
  • 网盘文件下载功能需求分析与技术方案选择:全面解析与最佳实践
  • windows修改远程端口
  • OCP中的OCS operator介绍及应用示例
  • 如何将 Vue-FastAPI-Admin 项目的数据库从 SQLite 切换到 MySQL?
  • 量子纠缠物理本质、技术实现、应用场景及前沿研究
  • Web三漏洞学习(其一:文件上传漏洞)
  • 25.4.15学习总结
  • 代码随想录第18天:二叉树
  • 04-Seata 深度解析:从分布式事务原理到 Seata 实战落地
  • Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报
  • 【leetcode hot 100 72】编辑距离
  • MCP认证难题破解指南
  • 单片机非耦合业务逻辑框架
  • 首开股份:一季度净利润亏损约10.79亿元,签约金额63.9亿元
  • 马克思主义理论研究教学名师系列访谈|杜玉华:马克思主义是“认识世界”和“改变世界”的思维工具
  • 中国武术协会原主席张耀庭逝世,曾促成电影《少林寺》拍摄
  • “五一”假期预计全社会跨区域人员流动量超14亿人次
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 新疆维吾尔自治区原质量技术监督局局长刘新胜接受审查调查