单击保存按钮触发表单验证规则

时间:2018-10-30 18:13:21

标签: c# wpf validation

我有一个文本框,其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;
    }
}

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

1 个答案:

答案 0 :(得分:1)

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

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