如何在wpf/XAML中实现条件验证规则

如何在wpf/XAML中实现条件验证规则,wpf,validation,xaml,data-binding,Wpf,Validation,Xaml,Data Binding,我希望找到一种在XAML数据绑定中使用自定义ValidationRule的方法,但要有条件地使用它,以便动态选择使用的规则。对于我的特殊问题,我想验证物理位置范围,但该范围可以是绝对的,也可以是相对的,这取决于绑定到复选框的布尔属性 以下是我实现的验证规则,属性Range2Sel确定使用哪个范围: class IntDualRangeRule : ValidationRule { public int Min1 { get; set; } public int Max1 { ge

我希望找到一种在XAML数据绑定中使用自定义ValidationRule的方法,但要有条件地使用它,以便动态选择使用的规则。对于我的特殊问题,我想验证物理位置范围,但该范围可以是绝对的,也可以是相对的,这取决于绑定到复选框的布尔属性

以下是我实现的验证规则,属性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;
    }
}
我遇到的障碍是如何在XAML中实现这一点,注意??:

<Binding Path="GTargetPos" UpdateSourceTrigger="LostFocus" Mode="TwoWay" >
    <Binding.ValidationRules>
        <loc:IntDualRangeRule 
            Min1="{x:Static loc:GVars.MTP_GANTRY_TPOS_ABS_MIN}"  
            Max1="{x:Static loc:GVars.MTP_GANTRY_TPOS_ABS_MAX}" 
            Min2="{x:Static loc:GVars.MTP_GANTRY_TPOS_REL_MIN}"  
            Max2="{x:Static loc:GVars.MTP_GANTRY_TPOS_REL_MAX}" 
            Range2Sel=???
            />
    </Binding.ValidationRules>
</Binding>
绑定对这种参数不起作用,所以我不知道下一步该怎么做,也不知道对于其他人以前肯定遇到过的问题,最好的做法是什么。除了这个特定的问题之外,我还想知道其他人如何处理仅在特定条件下相关的验证规则


谢谢

尝试将Min1 Min2 Max1 Max2设置为依赖属性,而不是普通属性

<Binding Path="GTargetPos" UpdateSourceTrigger="LostFocus" Mode="TwoWay" >
    <Binding.ValidationRules>
        <loc:IntDualRangeRule 
            Min1="{x:Static loc:GVars.MTP_GANTRY_TPOS_ABS_MIN}"  
            Max1="{x:Static loc:GVars.MTP_GANTRY_TPOS_ABS_MAX}" 
            Min2="{x:Static loc:GVars.MTP_GANTRY_TPOS_REL_MIN}"  
            Max2="{x:Static loc:GVars.MTP_GANTRY_TPOS_REL_MAX}" 
            Range2Sel=???
            />
    </Binding.ValidationRules>
</Binding>