您的位置:首页 > 其它

Binding数据校验

2015-10-15 17:41 295 查看
Binding的ValidationRules属性类型是Collection<ValidationRule>,可以为每个Binding这只多个数据校验条件,
每个条件是一个ValidationRule类型对象。ValidationRule类是抽象类,使用时创建派生类并实现Validate方法。


在UI上绘制一个TextBox和一个Slider,将其关联,Slider的取值范围0-100。

<StackPanel>
<TextBox x:Name="txtBox1" Margin="5"/>
<Slider x:Name="slider1" Minimum="-10" Maximum="100" Margin="5" />
</StackPanel>


为了进行校验,需要一个ValidationRule的派生类:

public 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");
}
}


然后在窗体的构造器建Binding

Binding binding = new Binding("Value") { Source = this.slider1 };
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
RangeValidationRule rvr = new RangeValidationRule();
rvr.ValidatesOnTargetUpdated = true;//检测来自Source的数据是否有问题
binding.ValidationRules.Add(rvr);
this.txtBox1.SetBinding(TextBox.TextProperty, binding);


在发生错误是若要提示该错误信息需要将binding.NotifyOnValidationError 设为true

Binding binding = new Binding("Value") { Source = this.slider1 };
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
RangeValidationRule rvr = new RangeValidationRule();
rvr.ValidatesOnTargetUpdated = true;
binding.ValidationRules.Add(rvr);
binding.NotifyOnValidationError = true;
this.txtBox1.SetBinding(TextBox.TextProperty, binding);
this.txtBox1.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(this.ValidationError));

void ValidationError(object sender, RoutedEventArgs e)
{
if (Validation.GetErrors(this.txtBox1).Count>0)
{
this.txtBox1.ToolTip = Validation.GetErrors(this.txtBox1)[0].ErrorContent.ToString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深入浅出WPF