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

如何检测.NET MVVM中属性是否已通过验证?

如何直接检测属性是否已通过验证?

你不需要重复编写校验代码,改用ObservableValidator作为ViewModel基类即可——它内置了验证状态管理功能,能直接获取属性的验证结果。

步骤1:替换基类

将EthernetConnection的基类从ObservableObject改为ObservableValidator,后者集成了INotifyDataErrorInfo接口,会自动跟踪属性的验证状态。

步骤2:简化属性实现

利用ObservableValidator的SetProperty方法,它会自动触发属性变更通知和验证逻辑,无需手动调用OnPropertyChanged:

public partial class EthernetConnection : ObservableValidator
{
    private string _IP = "";
    
    [IPAddress]
    public string IP
    {
        get => _IP;
        set => SetProperty(ref _IP, value);
    }    

    public sealed class IPAddressAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {                
            string pattern = @"^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$";
            if (value is string ipStr && Regex.IsMatch(ipStr, pattern))
            {
                return ValidationResult.Success;
            }                
            return new ValidationResult("请输入合法的IP地址");
        }            
    }
}

步骤3:在Apply按钮逻辑中检查验证状态

现在你可以直接通过以下方式判断IP属性是否合法:

  • 检查单个属性:调用GetErrors("IP"),若返回集合为空,说明该属性验证通过;
  • 检查所有属性:使用HasErrors属性,它会返回当前ViewModel所有属性的整体验证状态。

示例Apply命令逻辑:

public void ApplyIPSetting()
{
    // 检查IP属性是否验证通过
    if (!GetErrors("IP").Any())
    {
        // 执行设置IP的逻辑
        SetDeviceIP(IP);
    }
    else
    {
        // 处理验证失败的情况,比如提示用户
    }
}

这样就完全不用重复编写正则校验逻辑,直接复用你已定义的IPAddressAttribute验证规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:28