ReactiveUI.Validation是否支持嵌套验证?父ViewModel需子ViewModel均有效
ReactiveUI.Validation 嵌套验证支持说明
ReactiveUI.Validation 完全支持嵌套验证场景,可实现父ViewModel仅在所有子ViewModel验证通过时才视为有效的逻辑。
实现步骤与示例代码
首先确保子ViewModel继承ReactiveValidationObject并配置自身验证规则:
public class ChildViewModel : ReactiveValidationObject { private string _name; public string Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); } public ChildViewModel() { // 子ViewModel的基础验证规则:名称不能为空 this.ValidationRule( vm => vm.Name, name => !string.IsNullOrWhiteSpace(name), "名称不能为空"); } }
然后在父ViewModel中关联子ViewModel的验证状态:
public class ParentViewModel : ReactiveValidationObject { public ChildViewModel Child1 { get; } public ChildViewModel Child2 { get; } public ParentViewModel() { Child1 = new ChildViewModel(); Child2 = new ChildViewModel(); // 分别关联两个子ViewModel的验证状态 this.ValidationRule( vm => vm.Child1, child => child.IsValid, "子对象1验证未通过"); this.ValidationRule( vm => vm.Child2, child => child.IsValid, "子对象2验证未通过"); // 可选:合并为单条规则,统一检查所有子对象 // this.ValidationRule( // vm => new { vm.Child1, vm.Child2 }, // children => children.Child1.IsValid && children.Child2.IsValid, // "存在未通过验证的子对象"); } }
核心要点
- 子ViewModel必须正确实现自身验证,
IsValid属性会自动同步其验证状态。 - 父ViewModel通过
ValidationRule绑定子ViewModel的IsValid属性,只有所有子对象验证通过时,父ViewModel的IsValid才会返回true。 - 可根据需求选择为每个子对象单独设置错误提示,或合并为统一提示。
内容的提问来源于stack exchange,提问作者SuperJMN
相关产品推荐
相关产品推荐

