Binding的数据校验
Binding的ValidationRules 可以每个Binding 设置多个数据校验条件。
下面创建一个规则,必须继承抽象类 ValidationRule,下面规则(0~100)
public class RangeValidationRule : ValidationRule
{
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, "0~100");
}
}
UI
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox x:Name="txt" Margin="5,5,5,265"/>
<Slider x:Name="slider1" Minimum="0" Maximum="100" Value="50" Margin="0,191,0,101" />
</Grid>
</Window>
后台绑定
/// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Init(); } public void Init() { Binding binding = new Binding("Value") { Source = slider1 }; binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; RangeValidationRule rule = new RangeValidationRule(); rule.ValidatesOnTargetUpdated = true; //默认只校验target,设置true,也校验source binding.ValidationRules.Add(rule); binding.NotifyOnValidationError = true; //错误是发出信号 txt.SetBinding(TextBox.TextProperty, binding); txt.AddHandler(Validation.ErrorEvent,new RoutedEventHandler(this.ValidationError)); //监听路由事件 } void ValidationError(object sender,RoutedEventArgs e) { if(Validation.GetErrors(txt).Count()>0) { this.txt.ToolTip = Validation.GetErrors(this.txt)[0].ErrorContent.ToString(); } } }
运行图(错误显示到提示框,而且无法更新到source)



浙公网安备 33010602011771号