我在验证方面遇到了一些问题。我创建了一个名为RequiredFieldRule的自定义验证器,它在xaml中应用如下:
<TextBox local:Masking.Mask="^[a-zA-Z0-9]*$" x:Name="CameraIdCodeTextBox" Grid.Row="1" Grid.Column="1">
<Binding Path="CameraIdCode" Mode="TwoWay">
<Binding.ValidationRules>
<localValidation:RequiredFieldRule />
</Binding.ValidationRules>
</Binding>
</TextBox>
当用户离开该TextBox而不输入值时,该验证器返回以下内容:
return new ValidationResult(false, ValidationFailedMessage);
我想展示一些自定义的视觉反馈,并尝试使用Validation.Error事件捕获错误,因为它冒出来了:
private void Grid_Error(object sender, ValidationErrorEventArgs e)
{
// do stuff here
}
不幸的是,永远不会调用该处理程序。我的问题是,当它内部的TextBox正确返回失败的ValidationResult时,为什么不调用该处理程序?
答案 0 :(得分:8)
您没有在XAML中设置所需的所有内容。尝试添加这些XAML属性:
像这样:
<TextBox local:Masking.Mask="^[a-zA-Z0-9]*$" x:Name="CameraIdCodeTextBox" Grid.Row="1" Grid.Column="1">
<Binding Path="CameraIdCode" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<localValidation:RequiredFieldRule />
</Binding.ValidationRules>
</Binding>
</TextBox>
我有以下示例,因此我将其加载并测试您正在做的事情,我遇到了同样的问题。 http://www.wpfsharp.com/2012/02/03/how-to-disable-a-button-on-textbox-validationerrors-in-wpf/
为了证明我的建议有效,我将我提到的属性添加到我的示例中,并且我在网格中添加了冒泡事件Validation.Error =“MainGrid_Error”,并且它会触发。
添加这些属性会导致冒泡事件在我的示例中触发。