2011-11-11 23 views
2

私はグリッド列で検証を行う必要があります。その列のすべてのセルは空白です。ユーザーはデータを入力する必要があり、次にそれを検証する必要があります。Silverlight Datagrid Validation on End編集

私は現時点でセルの検証を行っていますが、終了編集イベントの代わりに開始編集イベントで動作します。これは、検証が情報を入力したかどうかを確認する必要があるため、無意味です。

エンドエディットイベントでバリデーションを検証するにはどうすればよいですか?

ご協力いただきありがとうございます。

Niven

コード:

private string _reference; 
    public string Reference 
    { 
     get 
     { 
      return _reference; 
     } 
     set 
     { 
      _reference = value; 
      ChangeValue("Reference"); 
     } 
    } 


     public event PropertyChangedEventHandler PropertyChanged; 

     public void ChangeValue(string propName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
      } 
     } 
     public string this[string columnName] 
     { 
      get 
      { 
       string msg = null; 
       if (columnName == "Reference") 
       { 
        if (Reference == "" && ValidateItem) 
        { 
         msg = "Reference is Required. Please Enter a Reference"; 
        } 
       } 
       return msg; 
      } 
     } 

     string err; 
     public string Error 
     { 
      get { return err; } 
     } 
+0

あなたが既に持っているBeginEdit検証を表示できますか? – slugster

+0

更新されました。これは役に立ちますか? – nivensookharan

答えて

0

私はちょうど下のカスタムコードでこの動作を解決してきました。私はまだすべてのシナリオをテストする時間がありませんでしたが、結果にはかなり自信があります。

public class ExtendedDataGrid : DataGrid { 
    private ValidationSummary _validationSummary = null; 
    private bool _validationFilterBehaviorApplied = false; 
    private bool _validationFilterBehaviorRestored = false; 

    public ExtendedDataGrid() { } 

    public override void OnApplyTemplate() { 
     base.OnApplyTemplate(); 

     this._validationSummary = (ValidationSummary)this.GetTemplateChild("ValidationSummary"); 
    } 

    protected override void OnBeginningEdit(DataGridBeginningEditEventArgs e) { 
     if (!_validationFilterBehaviorApplied) { 
      _validationSummary.Filter = ValidationSummaryFilters.None; 
      _validationFilterBehaviorApplied = true; 
     } 

     base.OnBeginningEdit(e); 
    } 

    protected override void OnRowEditEnding(DataGridRowEditEndingEventArgs e) { 
     if (_validationFilterBehaviorApplied && !_validationFilterBehaviorRestored) { 
      _validationSummary.Filter = ValidationSummaryFilters.All; 
      _validationFilterBehaviorRestored = true; 
     } 

     base.OnRowEditEnding(e); 
    } 

    protected override void OnRowEditEnded(DataGridRowEditEndedEventArgs e) { 
     _validationFilterBehaviorApplied = false; 
     _validationFilterBehaviorRestored = false; 

     base.OnRowEditEnded(e); 
    } 
} 
関連する問題