文本框验证仅在文本更改后才起作用

时间:2016-12-20 05:25:34

标签: c# validation mvvm uwp windows-10-universal

我已经在我的应用中应用了MVVM,通过关注this tutorialthis sample来实现某些页面的验证规则,因此验证工作正常且非常有创意但我在验证文本框文本时遇到了一个问题在以下场景中:

在实施Required OR Regular Expression或任何其他数据验证规则后,除非文本框文本发生某些更改(即用户输入一些文本并将其删除,否则将无法启动)需要验证和验证错误)

这意味着页面中的所有TextBox都有效,即使它们由Required注释,并且它们不包含任何文本(如果它们的文本没有发生任何变化)

1 个答案:

答案 0 :(得分:1)

  

这意味着页面中的所有TextBox都是有效的

根据我的样本测试,除非你调用以下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已验证但不是第二个:

enter image description here

验证全部:

enter image description here