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



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

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

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

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

最新更新