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

ObservableValidator整数验证异常:ViewModel的HasErrors属性未更新

解决方案

问题根源

int是值类型,没法存null:当你输入空内容时,绑定系统会自动把属性值设成int的默认值0,这时候Required验证根本触发不了;而且GUI显示的错误大概率是绑定层无法把空字符串转成int的错误,不是ViewModel里的验证错误,所以HasErrors自然不会同步更新。

具体修复步骤

1. 把属性改成可空整数(int?)

直接修改ViewModel里的属性类型,让空输入能被正确识别成null,这样Required验证就能正常工作了:

[ObservableProperty]
[NotifyDataErrorInfo]
[Required(ErrorMessage = "Number of Pins must be greater than 0")]
[Range(1, int.MaxValue, ErrorMessage = "Number of Pins must be greater than 0")]
private int? createPartLibraryNumberOfPins;

改成可空类型后,输入空内容时属性值会变成null,Required验证立马生效,ObservableValidator会正确标记错误,HasErrors也就同步更新了。

2. 调整绑定的更新时机

在View的绑定设置里,把UpdateSourceTrigger设为PropertyChanged,确保输入一变化就同步到ViewModel:

<!-- WPF示例 -->
<TextBox Text="{Binding CreatePartLibraryNumberOfPins, UpdateSourceTrigger=PropertyChanged}" />

避免因为延迟更新,导致ViewModel的属性没及时跟上输入变化,进而HasErrors没更新。

3. 优化输入框显示(可选)

如果输入框还会显示绑定相关的错误提示,可以加个TargetNullValue,把ViewModel里的null映射成空字符串,让显示和ViewModel状态一致:

<TextBox Text="{Binding CreatePartLibraryNumberOfPins, UpdateSourceTrigger=PropertyChanged, TargetNullValue=''}" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:52:09