【问题标题】:WPF ValidationRule Validate when the control is loadedWPF ValidationRule 在加载控件时进行验证
【发布时间】:2010-04-15 09:59:20
【问题描述】:

我有一个带有此验证的控件

<MyPicker.SelectedItem>
 <Binding Path="Person.Value" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
  <Binding.ValidationRules>
   <rules:MyValidationRule ValidationType="notnull"/>
  </Binding.ValidationRules>
 </Binding>
</MyPicker.SelectedItem>

这是验证类:

class MyValidationRule : ValidationRule
{        
 private string _validationType;
 public string ValidationType
 {
  get { return _validationType; }
  set { _validationType = value;  }
 }

 public override ValidationResult Validate(object value, CultureInfo cultureInfo)
 {            
  ValidationResult trueResult = new ValidationResult(true, null);

  switch (_validationType.ToLower())
  {
   case "notnull": return value == null ? new ValidationResult(false, "EMPTY FIELD") : trueResult;               
   default: return trueResult;
  }
 }
}

问题:当属性改变时,调用Validate()方法是正确的。

但是要在一开始在创建 MyControl 时调用此方法?如果控件中有空值(并显示验证错误),我需要在初始化后证明立即

【问题讨论】:

    标签: wpf validation


    【解决方案1】:

    好的,我已经解决了: 当元素与一个简单属性绑定时强制验证 - ValidatesOnTargetUpdated:

     <rules:MyValidationRule ValidatesOnTargetUpdated="True"  ValidationType="notnull"/>
    

    【讨论】:

      【解决方案2】:

      你的回答太棒了……我只想说这个。

      我有很多要验证的控件和很多规则,所以我所做的是在我的 validationRule 类中创建一个构造函数,并将 ValidatesOnTargetUpdated 设置为 True。

      这样我就不必遍历我的所有页面和控件来将此属性添加到验证规则中。

      示例

      public class MyRule : ValidationRule
      {
         public MyRule() : base() { ValidatesOnTargetUpdated = true; }
         ...
      }
      
      public class MyRule2 : MyRule 
      {
         public MyRule2() : base() { }
         ...
      }
      

      【讨论】:

        猜你喜欢
        • 2013-09-26
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-01
        • 2011-01-02
        • 1970-01-01
        相关资源
        最近更新 更多