无废话WPF系列10: Binding对数据的检验
设置Binding的ValidationRules属性对Binding进行检验
|
1
2
3
|
<StackPanel> <TextBox x:Name="txtAge" FontSize="30" Foreground="Red"></TextBox> <TextBlock x:Name="errorSummary" FontSize="30" Foreground="Red"></TextBlock> |
|
1
|
</StackPanel> |
后台代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Person p = new Person { Age = 20, Name = "Tom" }; Binding binding = new Binding("Age") { Source = p }; binding.NotifyOnValidationError = true; binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; RangeValidationRule rv = new RangeValidationRule(); binding.ValidationRules.Add(rv); this.txtAge.SetBinding(TextBox.TextProperty, binding); this.txtAge.AddHandler(Validation.ErrorEvent, new RoutedEventHandler(this.ValidationError)); } void ValidationError(object sender, RoutedEventArgs e) { if (Validation.GetErrors(this.txtAge).Count > 0) { this.txtAge.ToolTip = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString(); this.errorSummary.Text = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString(); |
|
1
2
3
4
5
6
|
// You can do everything here when validation error occurs } } }} |
同样,我们在XAML里也可以设置验证
|
1
2
3
4
5
6
7
8
9
10
|
<StackPanel> <TextBox x:Name="txtAge" FontSize="30" Foreground="Red" Validation.Error="txtAge_Error"> <Binding NotifyOnValidationError="True" Path="Age" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <local:RangeValidationRule></local:RangeValidationRule> </Binding.ValidationRules> </Binding> </TextBox> <TextBlock x:Name="errorSummary" FontSize="30" Foreground="Red"></TextBlock></StackPanel> |
后台代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Person p = new Person { Age = 20, Name = "Tom" }; this.DataContext = p; } private void txtAge_Error(object sender, ValidationErrorEventArgs e) { if (Validation.GetErrors(this.txtAge).Count > 0) { this.txtAge.ToolTip = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString(); this.errorSummary.Text = Validation.GetErrors(this.txtAge)[0].ErrorContent.ToString(); // You can do everything here when validation error occurs } } } |

浙公网安备 33010602011771号