设置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
}
}
}
|
王德水