WPF使用Binding对数据的校验

我们通常都会设置对输入的数值进行校验,在WPF也一样,在本示例中,我们使用两个控件,分别是TextBox1和Slider1,通过文本控件,输入符合slider的值,如果值不在此范围则显示文本框为红色,反映输入值不正确,控件不会因此改变。

1、XAML代码

<StackPanel>
        <TextBox x:Name="TextBox1" Margin="5"/>
        <Slider x:Name="slider1" Minimum="0" Maximum="100" Margin="5"/>
    </StackPanel>

2、为了进行校验,我们准备了一个ValidationRule派生类RangeValidationRule,通过需要实现Validate方法,来对数据进行校验。把他们分到一个类去写放映了代码的业务分布效率。

写继承类之前需要引用using System.Windows.Controls;否则无效,一下是代码

class RangeValidationRule:ValidationRule
    {
        //需要实现Validate方法
        public override ValidationResult Validate(object value, System.Globalization.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");
        }
    }

说明值只有在0到100之间是有效的。

3、在窗体构造器里写Binding

   //建立绑定,设置源为slider1
   Binding binding = new Binding("Value") { Source = this.slider1 };
   //更新源等于标记源的属性
   binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
   //添加校验规则
   RangeValidationRule rvr = new RangeValidationRule();
   //在此源中增加此规则
   binding.ValidationRules.Add(rvr);
   //将textbox1的文本属性与绑定源进行设定
   this.TextBox1.SetBinding(TextBox.TextProperty, binding);

4、在输入正常值时候,进度块将随着文本框的数值进行改变


5、在输入违法数值时,进度块不动,文本框变红,反映输入值违法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章