我有一个文本框,其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;
}
}
假设我的表单上还有其他几个控件具有类似定义的验证规则,那么当单击“保存”按钮时,如何获取表单来验证所有控件上的所有规则?
答案 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>