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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:26