【问题标题】:Textbox Validation works only after text change文本框验证仅在文本更改后有效
【发布时间】:2017-05-05 06:18:31
【问题描述】:
我已在我的应用程序中应用 MVVM 以通过遵循 this tutorial 和 this sample 来实现某些页面的验证规则,因此验证工作正常,这是一种非常有创意的方式,但是在以下场景中验证文本框文本时我遇到了一个问题:
在实施Required OR Regular Expression 或任何其他数据验证规则后,除非文本框文本发生一些更改(即用户输入一些文本并将其删除,否则将触发 REQUIRED 验证和验证错误)会在那里)
这意味着页面中的所有文本框都是有效的,即使它们被 Required 注释并且它们不包含任何文本(以防它们的文本尚未发生更改)
【问题讨论】:
标签:
c#
validation
mvvm
uwp
windows-10-universal
【解决方案1】:
这意味着页面中的所有文本框都是有效的
根据我这边的示例测试,除非您调用以下用于验证所有属性的ValidateProperties() 方法,否则您将无法得到所有验证。
public bool ValidateProperties()
{
var propertiesWithChangedErrors = new List<string>();
// Get all the properties decorated with the ValidationAttribute attribute.
var propertiesToValidate = _entityToValidate.GetType()
.GetRuntimeProperties()
.Where(c => c.GetCustomAttributes(typeof(ValidationAttribute)).Any());
...
}
ViewModel 继承自 ValidatableBindableBase 类,该类将获得 Errors 属性。每个TextBox 控件都绑定自己的Errors 属性。一个TextBox 的错误将在此属性更改后更新,这不会影响其他TextBox,因为它们的属性不会更改。
文本更新导致第一个 TextBox 验证但不是第二个:
全部验证: