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深入浅出之我见
- TSF(Text Service Framework)简介
- 算法复习之:最大子串和问题
- Linux的join命令
- 8.Contains Duplicate
- C++自定义函数
- C#获取变量名的扩展方法
- Android 启动白屏或者黑屏闪现解决
- C#之 HashSet(临时笔记,未参考资料,请慎重)
- DOM对象和jQuery对象之间的相互转换
- IAudioCaptureClient interface
- 基于directshow技术实现的录音程序
- Amoeba for mysql安装配置
- MMS Host is unreachable
- Android笔记(三十七) 如何停止AsyncTask?
- CentOS 7下编译FreeSWITCH 1.6
- Spring+SpringMVC+mybatis+easyui整合实例-----spring mvc整合及mybatis事务部分
- 实战分析一个性能问题
- Fortify SCA快速入门以及常见问题解决方法
- (八)Spark源码理解之DAGScheduler---part3