如何同时使用MVVM Toolkit的ObservableProperty与ObservableValidator?
同时兼顾MVVM社区工具包的验证功能与源生成特性的解决方案
你可以直接将数据验证特性标注在[ObservableProperty]标记的私有字段上,这样既能保留源生成器自动生成属性、OnXXXChanged()分部方法的特性,又能实现基于ObservableValidator的数据验证。
具体实现示例
public class YourViewModel : ObservableValidator { [ObservableProperty] [Required(ErrorMessage = "You must enter a name.")] [MinLength(2)] [MaxLength(100)] private string name; // 直接实现自动生成的分部方法,处理属性变更逻辑 partial void OnNameChanged(string? oldValue, string? newValue) { // 这里编写属性变化后的自定义逻辑,比如联动其他属性、记录日志等 } }
原理说明
- MVVM社区工具包的源生成器会识别标记了
[ObservableProperty]的私有字段,自动生成对应的公开属性(此处为Name),同时将字段上的验证特性自动应用到生成的属性上。 - 由于你的ViewModel继承了
ObservableValidator,生成的属性setter会自动调用带验证参数的SetProperty重载,触发数据验证,UI端会正常显示红色提示框与错误信息。 - 源生成器依然会自动生成
OnNameChanged()分部方法,你只需按上面的方式实现该方法即可,无需手动编写完整属性,避免了之前的错误。
额外说明
如果需要自定义更复杂的验证逻辑,除了数据注解特性,你还可以:
- 重写
ObservableValidator的ValidateProperty方法,添加自定义验证规则 - 使用
[CustomValidation]特性指定自定义验证类
内容的提问来源于stack exchange,提问作者Mike Heggie
相关产品推荐
相关产品推荐

