Validation.Error不是Invoking Handler

one*_*ill 2 validation wpf

我在验证方面遇到了一些问题.我创建了一个名为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>
Run Code Online (Sandbox Code Playgroud)

当用户离开该TextBox而不输入值时,该验证器返回以下内容:

return new ValidationResult(false, ValidationFailedMessage);
Run Code Online (Sandbox Code Playgroud)

我想显示一些自定义的视觉反馈,并尝试使用Validation.Error事件捕获错误,因为它冒泡:

    private void Grid_Error(object sender, ValidationErrorEventArgs e)
    {
        // do stuff here

    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,永远不会调用该处理程序.我的问题是,当它内部的TextBox正确返回失败的ValidationResult时,为什么不调用该处理程序?

Rhy*_*ous 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>
Run Code Online (Sandbox Code Playgroud)

我有以下示例,所以我加载它并测试你正在做什么,我遇到了同样的问题. http://www.wpfsharp.com/2012/02/03/how-to-disable-a-button-on-textbox-validationerrors-in-wpf/

为了证明我的建议有效,我将我提到的属性添加到我的示例中,并且我在网格中添加了冒泡事件Validation.Error ="MainGrid_Error",并且它会触发.

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