WPF 绑定验证规则 ValidationRule

前台xaml:

<StackPanel Background="LightBlue">
            <TextBox x:Name="txtNum" Margin="5" Text="{Binding Value,ElementName=slider}"/>
            <Slider x:Name="slider" Maximum="100" Minimum="0" Margin="5"/>
        </StackPanel>

一般情况下,数值是双向绑定的。在TextBox连输入一个数字,滑块会滑动一段距离,但是输入不合法的数字,比如负数或者超过最大范围,就会显示0

现在想要输入不合法数字时,边框显示红色

需要假如验证规则。

声明一个规则类

public class RangeValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            double d = 0;
            if(double.TryParse(value.ToString(),out d))
            {
                if (d > 0 && d <= 100)
                {
                    return new ValidationResult(true, null);
                }
            }
            //验证失败
            return new ValidationResult(false, "Validation Failed");
        }
    }

继承自ValidationRule。

 

然后绑定

             Binding binding = new Binding("Value") { Source = slider };
            //绑定触发条件:属性改变时触发
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;

            //绑定验证规则,规则需要继承ValidationRule
            binding.ValidationRules.Add(new RangeValidationRule());
            txtNum.SetBinding(TextBox.TextProperty, binding);

这里使用了Binding的UpdateSourceTrigger和ValidationRule属性。

 

显示如下:

 

posted @ 2023-03-16 17:55  RookieCoderAdu  阅读(484)  评论(0)    收藏  举报