2012-11-28 2 views
1

나는 유효성 검사 규칙을 가지고 내보기에 텍스트 상자를 가지고있다. 바운드 속성은 업데이트되지 않고 텍스트 상자는 빨간색으로 표시됩니다. 원본을 업데이트해야하지만 여전히 텍스트 상자 주위에 마커를 유지해야합니다. (입력은 나중에 EF에 의해 다시 검증됩니다.)WPF 검증 규칙 업데이트 어쨌든

어떻게하면됩니까?

답변

6

당신은 "UpdatedValue"에 유효성 검사 규칙의 ValidationStep 속성을 설정하여이 작업을 수행 할 수 있습니다 :이 유효성 검사 규칙 클래스가 아닌 실제 필드 값에 전달 될 수있는 BindingExpression을 유발한다는

<Binding.ValidationRules> 
    <c:EmptyStringRule ValidationStep="UpdatedValue"/> 
</Binding.ValidationRules> 

주, 업데이트 된 필드의 값을 쿼리하기 위해 그에 따라 유효성 검사 규칙을 수정해야합니다. 이와

public class EmptyStringRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     var be = value as BindingExpression; 
     if (be != null) 
     { 
      var item = be.DataItem as MyViewModel; 
      if (item != null) 
      { 
       if (String.IsNullOrEmpty(item.MyStringProperty)) 
       { 
        return new ValidationResult(false, "String Cannot be empty"); 
       } 
      } 
     } 
     return new ValidationResult(true, null); 
    } 
} 

텍스트가 비어로 설정되어있는 경우가 MyStringProperty에 업데이트를 할 실제로해야 설정,하지만 여전히 유효성 검사를 수행합니다 (내 예에서 바인딩 된 문자열 속성은 MyViewModel.MyStringProperty라고합니다).