【问题标题】:Textbox Validation works only after text change文本框验证仅在文本更改后有效
【发布时间】:2017-05-05 06:18:31
【问题描述】:

我已在我的应用程序中应用 MVVM 以通过遵循 this tutorialthis 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 验证但不是第二个:

    全部验证:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多