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에서이 문제를 해결하는 방법을 알아 냈습니다 ("???"참고) :
바인딩은 이러한 종류의 매개 변수에서 작동하지 않으므로 다음에 어디로 가야하는지 또는 다른 사람들이 전에 만난 문제에 대한 "모범 사례"는 무엇인지 모릅니다. 이 특정 문제 외에도 다른 조건이 특정 조건에서만 관련이있는 유효성 검사 규칙을 어떻게 다루는 지 알고 싶습니다.
감사합니다.