Validation.Error不是Invoking Handler

时间:2012-03-19 02:07:45

标签: wpf validation

我在验证方面遇到了一些问题。我创建了一个名为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时,为什么不调用该处理程序?

1 个答案:

答案 0 :(得分:8)

您没有在XAML中设置所需的所有内容。尝试添加这些XAML属性:

  • UpdateSourceTrigger = “的PropertyChanged”
  • NotifyOnValidationError = “真”
  • ValidatesOnExceptions = “真”

像这样:

<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”,并且它会触发。

添加这些属性会导致冒泡事件在我的示例中触发。