2012-03-12 5 views
0

코드 숨김에서 유효성 검사를 수행하는 중 발생했습니다. 내 데이터가 DataGrid에 표시됩니다. 열 (유형) 중 하나가 드롭 다운이며 드롭 다운 메뉴가 변경되면 코드 뒤에서 처리되는 DropDownClosed 이벤트가 트리거됩니다.INotifyDataErrorInfo 코드 뒤에서 코드 올리기 오류가 발생했습니다

내가 얻으려고하는 것은 드롭 다운에서 새로 선택한 유형과 일치하는 다음 열의 내용을 확인하는 것입니다. 일치하지 않으면 격자에 유효성 검사 오류가 표시되기를 원합니다. INotifyDataErrorInfo 인터페이스를 사용하여 유효성 검사를 구현했으며 코드에서 사용할 때를 제외하고는 정상적으로 작동합니다. 코드가 유효성 검사를 호출하면 DataGrid의 ValidationSummary는 절대로 업데이트되지 않습니다. 내가 여기서 뭘 잘못하고 있니? 유효성 검증 규칙 방법은 ruletypevalue 호출이 방법을 기반으로합니다

 private void TypeBoxChanged(object sender, EventArgs e) 
     { 
     ComboBox box = (sender as ComboBox); 
     IncomingPolicy row = (IncomingPolicy)box.DataContext; 

     string ruleTypeValue = TypeList.GetKeyForText(box.SelectedItem.ToString()); 
     //check if the type is the same 
     if(row.TypeWrapper == ruleTypeValue) 
      return; 
     if (row.ValidateRule(ruleTypeValue)) 
     { 
      //SAVE the record 
     } 
     else 
     { 
      row.RaiseErrorsChanged("RuleWrapper"); 
     } 
    } 

: 디버거를 사용할 때 명확하게 여기

핸들러는 ... 오류가 인터페이스의 사전으로 [오류에 추가되는 것을 볼 수 있습니다

 public bool ValidateRegularExpression(string property, string value, string expression, string errorMessage) 
     { 
     bool isValid = true; 
     Regex regex = new Regex(expression); 
     Match match = regex.Match(value); 
     if (match.Success) 
     { 
      RemoveError(property, errorMessage);     
     } 
     else 
     { 
      AddError(property, errorMessage, false); 
      isValid = false; 
     } 

     return isValid; 
    } 

나는 몇 시간 이전에 내가 검증 시간을 구현했습니다 MSDN http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo%28VS.95%29.aspx

+1

유효성 검사의 성공 여부에 관계없이 항상 RemoveError를 호출해야한다고 생각합니다. 아니면'RaiseErrorsChanged (property)'에 대한 호출을 메서드의 끝에 추가해보십시오. – vorrtex

+0

그리고 ValidationSummary 컨트롤 만있는 문제 (빨간색 테두리가 아닌)는 유효성 검사가 필요한 바인딩에'NotifyOnValidationError = True'를 추가하십시오. – vorrtex

+0

@vorrtex 당신이 답을하면 나는 그것을 표시 할 RaiseErrorChanged를 놓쳤다. thx – Stainedart

답변

3

에 샘플 구현을 따라

http://vortexwolf.wordpress.com/2011/10/01/wpf-validation-with-idataerrorinfo/

Source code

주요 구현은 여기에 있습니다 : :

this.PropertyChanged += (s, e) => 
{ 
    // if the changed property is one of the properties which require validation 
    if (this._validator.PropertyNames.Contains(e.PropertyName)) 
    { 
     this._validator.ValidateProperty(e.PropertyName); 
     OnErrorsChanged(e.PropertyName); 
    } 
} 

당신은 항상 OnErrorsChanged (또는 RaiseErrorsChanged에 전화해야 elpers은 모두 인터페이스 IDataErrorInfoINotifyDataErrorInfo에 대한 샘플 솔루션을 개발 귀하의 경우) 유효성 검사 성공 여부에 관계없이 : 속성이 유효하지 않은 경우 - 빨간색 테두리는 di splayed가 유효하면 바인딩 된 컨트롤이 정상 상태로 돌아갑니다.

+0

나는 당신의 코드를 시험하고있다. MVVM을 사용하여 구현하려고합니다. 희망이 잘 작동합니다. 시작 해줘서 고마워. –

관련 문제