2013-03-27 2 views
1

XAML 데이터 바인딩에서 사용자 지정 ValidationRule을 사용하지만 조건부로 사용하여 사용되는 규칙이 동적으로 선택되도록하는 방법을 찾고있었습니다. 내 특정 문제에 대해, 나는 실제 위치 범위를 검증하고 싶지만 그 범위는 부울 속성 (확인란에 바인딩 됨)에 따라 절대 또는 상대 중 하나 일 수 있습니다. 여기 wpf/XAML에서 조건부 유효성 검사 규칙을 구현하는 방법

은 (재산 Range2Sel 범위가 사용되는 결정) 내가 구현 유효성 검사 규칙입니다 :

class IntDualRangeRule : ValidationRule 
{ 
    public int Min1 { get; set; } 
    public int Max1 { get; set; } 
    public int Min2 { get; set; } 
    public int Max2 { get; set; } 
    public bool Range2Sel { get; set; } 

    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     ValidationResult vr = ValidationResult.ValidResult;  
     try 
     { 
      int num = int.Parse(value.ToString()); 
      int rangeMin = Range2Sel ? Min2 : Min1; 
      int rangeMax = Range2Sel ? Max2 : Max1; 
      if (num < rangeMin || num > rangeMax) 
      { 
       vr = new ValidationResult(false, "The value cannot be less than " + rangeMin + " or greater than " + rangeMax + "."); 
      } 
     } 
     catch (FormatException) 
     { 
      vr = new ValidationResult(false, "The value \"" + value.ToString() + "\" is not a valid integer number."); 
     } 

     return vr; 
    } 
} 

가 지금은 성공적으로 C# 코드에서이 유효성 검사 규칙을 사용하여 다음과 같이

IntDualRangeRule valInt = new IntDualRangeRule() { 
    Min1 = GVars.MTP_GANTRY_TPOS_ABS_MIN, 
    Max1 = GVars.MTP_GANTRY_TPOS_ABS_MAX, 
    Min2 = GVars.MTP_GANTRY_TPOS_REL_MIN, 
    Max2 = GVars.MTP_GANTRY_TPOS_REL_MAX, 
    Range2Sel = Some_Boolean_Property 
}; 
ValidationResult vRes = valInt.Validate(MyTargetPos, System.Globalization.CultureInfo.CurrentCulture); 

나는 XAML에서이 문제를 해결하는 방법을 알아 냈습니다 ("???"참고) :

바인딩은 이러한 종류의 매개 변수에서 작동하지 않으므로 다음에 어디로 가야하는지 또는 다른 사람들이 전에 만난 문제에 대한 "모범 사례"는 무엇인지 모릅니다. 이 특정 문제 외에도 다른 조건이 특정 조건에서만 관련이있는 유효성 검사 규칙을 어떻게 다루는 지 알고 싶습니다.

감사합니다.

답변

0

일반 속성 대신 Min1 Min2 Max1 Max2를 종속성 속성으로 사용하십시오.