在WPF中处理验证的最佳方法是什么?

时间:2013-06-12 13:59:56

标签: .net wpf validation

我想实现在winforms中模拟Errorprovider的验证机制。 我试图使用IDataErrorInfo但问题是它试图在表单加载上执行验证。我的要求是我需要点击页面上的按钮进行验证。 还有其他更好的方法在WPF中执行验证吗?

1 个答案:

答案 0 :(得分:2)

听起来你已经验证了它现在很简单 - 防止它在需要之前进行验证。在实现IErrorInfo的类上放置一个bool属性:

public bool IsReadyToValidate {get;set;}
每个属性中的

public object SomeProperty
{
  get {return _someProperty;}
  set
      {
         if(_someProperty == value) return;
         _property = value;
         if(IsReadyToValidate) 
               //do validation

或者如果您使用基于属性的验证:

[CustomMethodValidator("ValidateSomeProperty")]
    public string SomeProperty
    {
        if(_someProperty == value) return;
        set
        {
             if(_property == value)
                                return;
                            _property = value;
            RaisePropertyChanged(() => SomeProperty);
        }
    }

  private bool ValidateSomeProperty()
  {
       bool isValid = true;
       if(IsReadyToValidate)
          //do validation

        return is valid;

单击按钮,将IsReadyToValidate设置为true并重新生效。这一切都取决于您的实现。 可能是这样的方法吗?

public void Validate()
    {
        foreach (var prop in PropertiesWithValidators[GetType()])
            ValidateProperty(prop.Name);

        HasErrors = _errorDictionary.Count > 0;
        RaisePropertyChanged(() => Error);
    }

或者你可以做一些粗暴的方式,比如在你翻转标志以验证后重新填充属性

 public void Validate()
 {
     IsReadyToValidate = true;
     //now it will validate:
     SomeProperty = SomeProperty;