c# - 单击保存按钮时触发表单验证规则
问题描述
我有一个文本框,其 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>
推荐阅读
- python - sqlite.OperationalError:靠近“。”:语法错误
- java - 如何编写涉及一个对象和另一个不同类的相关对象的条件查询?
- html - 在部分内垂直居中旋转木马
- ios - 框架内的 NSLocalizedString 从外部包获取值
- mysql - 加入 2 个表,使用过滤器和排序依据
- reactjs - 如何在 react-final-form 的表单之外访问“原始”、“提交”和“form.reset”?
- asp.net-core - 4xx 时,StatusCodeResult 未记录到 App Insights
- python - 如果条目是一定长度,则将条目添加到列表框
- python - `python -m pip install` 有什么作用?
- android - 在 Monkey 工具中检查应用程序启动的时间延迟