1

winforms で Errorprovider をシミュレートする検証メカニズムを実装したいと思います。IDataErrorInfo を使用しようとしましたが、問題はフォームの読み込み時に検証を実行しようとしていることです。私の要件は、ページ内のボタンのクリック時に検証を実行する必要があることです。WPF で検証を実行するための他のより良い方法はありますか?

4

1 に答える 1

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;
于 2013-06-12T15:08:17.857 に答える