CommunityToolkit.Mvvm源生成器

2024-01-24 14:36

本文主要是介绍CommunityToolkit.Mvvm源生成器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

MVVM 工具包包含全新的 Roslyn 源生成器,有助于在使用 MVVM 体系结构编写代码时大幅减少样板。这意味着,在编写代码时,MVVM 工具包生成器现在将负责在后台为你生成其他代码。

以前:

private string? name;public string? Name
{get => name;set => SetProperty(ref name, value);
}private void SayHello()
{Console.WriteLine("Hello");
}private ICommand? sayHelloCommand;public ICommand SayHelloCommand => sayHelloCommand ??= new RelayCommand(SayHello);

现在:

[ObservableProperty]
private string? name;[RelayCommand]
private void SayHello()
{Console.WriteLine("Hello");
}

利用特性可以自动后台生成冗余代码,根据字段自动公开一个首字母大写的属性,可供View绑定使用。

需要继承 ObservableObject

ObservableProperty特性

除了帮我们自动生成更改通知代码,还可以:

1、便捷的更改时或更改后运行代码编写

[ObservableProperty]
private string? name;

对于上述代码,工具包会为我们自动生成以下代码:

public string? Name
{get => name;set{if (!EqualityComparer<string?>.Default.Equals(name, value)){string? oldValue = name;OnNameChanging(value);OnNameChanging(oldValue, value);OnPropertyChanging();name = value;OnNameChanged(value);OnNameChanged(oldValue, value);OnPropertyChanged();}}
}partial void OnNameChanging(string? value);
partial void OnNameChanged(string? value);partial void OnNameChanging(string? oldValue, string? newValue);
partial void OnNameChanged(string? oldValue, string? newValue);

其中为我们准备了四个分布方法,分别在值改变中 或 改变后被调用。如有需要我们可以通过重写该方法达到想要的目的,如下:

[ObservableProperty]
private string? name;partial void OnNameChanging(string? value)
{Console.WriteLine($"Name is about to change to {value}");
}partial void OnNameChanged(string? value)
{Console.WriteLine($"Name has changed to {value}");
}

2、通知依赖属性

FullName属性与之相关联、依赖

[ObservableProperty]
[NotifyPropertyChangedFor(nameof(FullName))]
private string? name;public string FullName{get=>"123"+Name}

3、通知依赖命令

MyMethodCommand命令,其执行状态依赖于此属性的值。 也就是说,每当此属性发生更改时,命令的执行状态都应失效并再次计算

[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(MyMethodCommand))]
private string? name;[RelayCommand(CanExecute = nameof(CanExecute))]
private void MyMethod()
{Console.WriteLine("Hello!");
}bool CanExecute => Name.Length > 10

4、属性验证

如果在继承自 ObservableValidator 的类型中声明属性,则可以使用任何验证特性对该属性进行标记,然后请求生成的资源库触发对该属性的验证。 可以使用 NotifyDataErrorInfo 特性实现此目的:

[ObservableProperty]
[NotifyDataErrorInfo]
[Required]
[MinLength(2)] // Any other validation attributes too...
private string? name;

这篇关于CommunityToolkit.Mvvm源生成器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640003

相关文章

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)

1、MVC MVC(Model-View-Controller) 是一种常用的架构模式,用于分离应用程序的逻辑、数据和展示。它通过三个核心组件(模型、视图和控制器)将应用程序的业务逻辑与用户界面隔离,促进代码的可维护性、可扩展性和模块化。在 MVC 模式中,各组件可以与多种设计模式结合使用,以增强灵活性和可维护性。以下是 MVC 各组件与常见设计模式的关系和作用: 1. Model(模型)

纸牌函数生成器

此模板用来生成纸牌类的测试数据,本人手打,不合理或缀余的地方希望大神指出。 T=10000(测试数据组数), t (两摞相等的牌,每摞牌的数量); 每张牌用A,2~9,T,J,Q,K;表示牌面大小; 用S,H,C,D;表示花色。 共52张牌。 #include<stdio.h>#include<time.h>#include<stdlib.h>#include<string.

【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程酒吧一群美女车展模特大屏幕视频改字AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】酒吧一群美女车展模特大屏幕视频改字AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把AE模板导入AE软件 修改图片或文字 渲染出视频

[Python]生成器和yield关键字

生成器和yield关键字 1.生成器介绍: 概述: ​ 它指的是 generator, 类似于以前学过的: 列表推导式, 集合推导式, 字典推导式… 作用: ​ 降低资源消耗, 快速(批量)生成数据. 实现方式: ​ 1.推导式写法. my_generator = (i for i in range(5)) ​ 2.yield写法. def get_generator():for i

Mybatis自动生成器的使用方式

文章目录 编写generator配置文件配置maven插件第一种启动方式第二种启动方式 编写generator配置文件 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration

【生日视频制作】劳斯莱斯库里南中控改名软件AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程豪车劳斯莱斯库里南中控改名软件AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】劳斯莱斯库里南中控改名软件AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE软件 把AE模板导入AE软件 修改图片或文字 渲染出视频

前端---对MVC MVP MVVM的理解

就需要从前端这些年的从无到有、从有到优的变迁过程讲一下。 1. Web1.0时代 在web1.0时代并没有前端的概念,开发一个web应用多数采用ASP.NET/Java/PHP编写,项目通常用多个aspx/jsp/php文件构成,每个文件中同时包含了HTML、CSS、JavaScript、c#/Java/PHP代码,系统整体架构可能是这样子的: 我们可以看到服务端是比较重的,有一块既在客户

【Python知识宝库】迭代器与生成器:高效处理大数据集

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、迭代器:逐个访问数据的艺术1. 迭代器的定义2. 自定义迭代器3. 迭代器的优势 二、生成器:按需生成数据的魔法1. 生成器的定义2. 创建生成器生成器函数生成器表达式 3. 生成器的优势 三、迭代器和生成器在处理