2011-11-11 6 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); 
    } 
}