MvvmToolkit的使用

背景:MvvmLight不更新了,用Toolkit代替

1、首先下载好社区版本的NuGet包

2、ViewModel中需要继承ObservableObject,查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。

3、对于属性的set,可以简写成一行:set => SetProperty(ref title, value); 

4、还有RelayCommnd也是直接用就行

        -- 这里有个需要注意的点就是:RelayCommand的第二个参数无法实时跟IsEnable属性绑定,因此需要在IsEnable更新的时候调用RelayCommand的NotifyCanExecuteChanged()方法进行通知Button

然后在8.0版本后推出了新的功能(要将ViewModel改为分布类)

[ObservableProperty]
private string title = "Hello world";   // 这个字段需要小写,同时这里是分布类,所以Title属性也是存在的,需要的话就直接调用就行,跟自己手动实现的一样的

        --直接写个特性上去给字段就可以实现set的功能,也是包含通知的

        -- 将鼠标放到上面就提示实现了这些

对IsEnable是需要通知Button通知CanExecute的,那就再加上特性[NotifyCanExecuteChangedFor(nameof(ButtonClickCommand))]

特性[RelayCommand]

将这个特性加到方法上,就可以自动生成一个方法名+Command的RelayCommand

在分析器中可以看到

        -- 因此在xmal中直接绑定就行

 那么像上面的RelayCommand的第二个参数CanExecute怎么办呢?

[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(ButtonClickCommand))] // 添加上这个才能通知Command更新
private bool isEnable;[RelayCommand(CanExecute = nameof(CanButtonClick))]  // 指向方法更加灵活,原本就是Action
private void ButtonClick()  // 可以异步,比如设置个几秒后再改变Title
{Title = "Goodbye";
}private bool CanButtonClick() => IsEnable;

异步版本

[RelayCommand(CanExecute = nameof(CanButtonClick))]
private async Task ButtonClick()
{await Task.Delay(1500);Title = "Goodbye";
}

         -- 实现的就是等个1.5s再操作,模拟一下数据的处理需要的时间,这个时候可以拓展一下地在前端显示个转圈圈,实现起来就是绑定一下ButtonClickCommand的IsRunning属性就行

特性[NotifyCanExecuteChangedFor]的使用就是可以通过属性通知属性

        title更新-->Caption也更新

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(Caption))]
private string title = "Hello world";   // 这个字段需要小写public string Caption => $"Title: {Title}";

通过反编译可以看出来是有实现的

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

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

相关文章

多线程高级知识点

多线程高级知识点 1.ThreadLocal 1.1 什么是 ThreadLocal? ​ ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程…

qt三大控件

1.QListWidget控件 先在ui界面将 QListWidget拖出来竖直对齐 再去代码中实现文本插入 两种插入方式 方法1 //listWidget使用 有左右中间对齐需求QListWidgetItem * itemnew QListWidgetItem("床前明月光"); // //上面只是独立的一句话,没有关联起来ui-&g…

6.OpenResty系列之深入理解(二)

1. 日志输出 vim /usr/local/openresty/nginx/conf/nginx.conf默认配置如下 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;http {#log_format main $remote_addr - $remote_user [$time…

计算机Java项目|基于Springboot实现患者管理系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号:KS-032…

LeCode:(606. 根据二叉树创建字符串)

题目链接 本体的难点: 什么时候去打印左右括号?什么时候省略? 解题过程:通过观察看到,每次遍历结点之前,打印了一个左括号;遍历到叶子,叶子的左右也要打印出括号来(先…

在VM下使用Composer完成快照方式的软件制作

Composer允许您构建软件、应用程序、偏好设置文件或是文档的安装包,安装包可以部署到远程电脑或是作为镜像流程的一部分。构建软件包的第一步就是创建包源,根据要打包的软件,Composer允许您监视软件的安装和使用驱动器上已存在的文件来创建包…

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行,在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…

性能优化-OpenMP基础教程(五)-全面讲解OpenMP基本编程方法

本文主要介绍OpenMP编程的编程要素和实战,包括并行域管理详细实战、任务分担详细实战。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀C…

【数据仓库与联机分析处理】多维数据模型

目录 一、数据立方体 二、数据模型 (一)星形模型 (二)雪花模式 (三)事实星座模式 三、多维数据模型中的OLAP操作 (一)下钻 (二)上卷 (三…

React之useRef hook

介绍 useRef是react的自定义hook,它用来引用一个不需要渲染的值。这篇文章会介绍useRef的简单用法。 使用场景 1.实现节流 通过useRef实现节流功能,在限制时间内多次提交,已第一次提交为准。 useThrottle.jsx import {useEffect, useRef,…

矩阵的乘法

首先矩阵的乘法定义如下&#xff1a; #include <stdio.h> int main() { int i 0; int j 0; int arr[20][20] { 0 }; int str[20][20] { 0 }; int s[20][20] { 0 }; int n1 0; int n2 0; int m2 0; int z 0; int m1 0;…

Linux入门攻坚——11、Linux网络属性配置相关知识1

网络基础知识&#xff1a; 局域网&#xff1a;以太网&#xff0c;令牌环网&#xff0c; Ethernet&#xff1a;CSMA/CD 冲突域 广播域 MAC&#xff1a;Media Access Control&#xff0c;共48bit&#xff0c;前24bit需要机构分配&#xff0c;后24bit自己…

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…

etcd储存安装

目录 etcd介绍: etcd工作原理 选举 复制日志 安全性 etcd工作场景 服务发现 etcd基本术语 etcd安装(centos) 设置&#xff1a;etcd后台运行 etcd 是云原生架构中重要的基础组件&#xff0c;由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册…

Linux引导过程与服务控制

目录 一、操作系统引导过程 1. 过程图示 2. 步骤解析 2.1 bios 2.2 mbr 2.3 grup 2.4 加载内核文件 3. 过程总结 4. centos6和centos7启动区别 5. 小结 二、服务控制及切换运行级别 1. systemd核心概念 2. 运行级别 3. 运行级别所对应的Systemd目标 4. Systemd…

计算机环境安全

操作系统安全----比如windows,linux 安全标识--实体唯一性 windows---主体&#xff1a;账户&#xff0c;计算机&#xff0c;服务 安全标识符SID-Security Identifier 普通用户SID是1000&#xff0c;管理用SID是500 linux---主体&#xff1a;用户&#xff0c;用户组&#xf…

云原生学习系列之基础环境准备(单节点安装kubernetes)

一、环境要求 操作系统CentOS 7.x-86_x64 硬件配置&#xff1a;内存2GB或2G&#xff0c;CPU 2核或CPU 2核&#xff0c;需要在虚拟机中提前设置好&#xff0c;不然后续会报错 二、系统初始化 1、设置主机名 # 在master节点执行 hostnamectl set-hostname master01 2、配置主…

论文浅尝 | 以词-词关系进行分类的统一命名实体识别

笔记整理&#xff1a;曹旭东&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱构建、自然语言处理 链接&#xff1a;https://arxiv.org/abs/2112.10070 1. 动机 在以前的工作中&#xff0c;命名实体识别&#xff08;NER&#xff09;涉及的主要问题有三种类型&#xff0c…

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇TypeScript 从入门到进阶…

5G-A,一根蓄满能量的弹簧

光阴转瞬&#xff0c;恍然间2024已经来到身边。经历了2023年全球AI技术大爆发&#xff0c;以及智能汽车、虚拟现实、自主科技等诸多领域取得关键进展。想必大家希望知道在新一年中有哪些值得期待的科技增长空间。 如果是这样&#xff0c;那么不妨将目光投向5G-A。 与其他科技领…