You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CommunityToolkit.Mvvm源码生成器实现必填(required)属性?

实现带required修饰符的ObservableProperty

完全可以通过CommunityToolkit.Mvvm的源码生成器实现这个需求,具体操作如下:

  1. 确认环境支持条件

    • 项目需使用C# 11或更高版本(required修饰符是C# 11引入的语法特性)
    • CommunityToolkit.Mvvm包版本升级至8.0及以上(该版本开始支持为生成的属性添加required相关配置)
  2. 标记私有后备字段
    在需要生成required属性的私有字段上,同时标注[ObservableProperty]和[property: RequiredMember]特性。[property: RequiredMember]用于告知源码生成器,要给生成的公共属性自动加上required修饰符。

    代码示例:

    using CommunityToolkit.Mvvm.ComponentModel;
    using System.Runtime.CompilerServices;
    
    public partial class UserViewModel : ObservableObject
    {
        // 生成的RequiredName属性会携带required修饰符
        [ObservableProperty]
        [property: RequiredMember]
        private string _requiredName;
    
        // 普通可观察属性,无required限制
        [ObservableProperty]
        private int _age;
    }
    
  3. 使用效果说明
    源码生成器会自动生成如下结构的属性代码:

    public required string RequiredName
    {
        get => _requiredName;
        set => SetProperty(ref _requiredName, value);
    }
    
    public int Age
    {
        get => _age;
        set => SetProperty(ref _age, value);
    }
    

    当创建UserViewModel实例时,必须初始化RequiredName属性,否则编译器会直接报错,强制你在实例化阶段完成赋值:

    // 正确写法:必须初始化RequiredName
    var vm = new UserViewModel { RequiredName = "张三" };
    
    // 错误写法:未初始化RequiredName,编译器触发报错
    var vm = new UserViewModel();
    

内容的提问来源于stack exchange,提问作者IFrank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:44:59