首页 > 解决方案 > 单击保存按钮时触发表单验证规则

问题描述

我有一个文本框,其 Text 属性设置如下:

<TextBox.Text>
    <Binding Path="PointOfContact">
        <Binding.ValidationRules>
            <local:NotEmptyValidationRule />
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>

该类NotEmptyValidationRule如下所示:

public class NotEmptyValidationRule : ValidationRule
{
    public string Message { get; set; }

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        if (string.IsNullOrWhiteSpace(value?.ToString()))
        {
            return new ValidationResult(false, Message ?? "A value is required");
        }
        return ValidationResult.ValidResult;
    }
}

假设我的表单上有几个其他控件具有类似定义的验证规则,当单击“保存”按钮时,如何让表单验证所有控件上的所有规则?

标签: c#wpfvalidation

解决方案


我通过INotifyDataErrorInfo在我的模型上实现接口并将验证实例映射到属性来实现这一点。如果任何验证检查失败,则在尝试保存时,您将调用该事件,该事件ErrorsChanged将包含无效字段的属性名称。您还必须ValidatesOnNotifyDataErrors在绑定上将标志设置为 true。我猜您希望在不保留验证器的单独实例的情况下这样做,但我不知道另一种方式。您还可以选择删除 xaml 中定义的验证器,因为它是多余的。

<TextBox.Text>
  <Binding Path="PointOfContact">
    <Binding.ValidatesOnNotifyDataErrors>True</Binding.ValidatesOnNotifyDataErrors>
    <Binding.ValidationRules>
        <local:NotEmptyValidationRule />
    </Binding.ValidationRules>
  </Binding>
</TextBox.Text>

推荐阅读