Wpf 验证。错误未调用处理程序

Wpf 验证。错误未调用处理程序,wpf,validation,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.ValidationRul

我在验证方面遇到了一些问题。我创建了一个名为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>
我想显示一些自定义的视觉反馈,并尝试使用Validation.Error事件在错误冒泡时捕获错误:

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

    }

不幸的是,该处理程序从未被调用。我的问题是,当处理程序中的文本框正确返回失败的ValidationResult时,为什么不调用该处理程序?

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

  • UpdateSourceTrigger=“PropertyChanged”
  • NotifyOnValidationError=“True”
  • ValidatesOnExceptions=“True”
像这样:

<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>

我有下面的例子,所以我加载了它并测试了你正在做的事情,我得到了同样的问题。

为了证明我的建议有效,我将我提到的属性添加到我的示例中,并将冒泡事件Validation.Error=“MainGrid\u Error”添加到我的网格中,它就会触发


在我的示例中,添加这些属性会引发冒泡事件。

他说得对,听他的。只有在
NotifyOnValidationError=“True”
时才会触发错误事件,只有在设置
validateOnceptions=“True”
@Rhyous Aweesome时才会发生验证。我一上班就去试试。如果你没有从我这里得到进一步的评论,这是有效的,我非常感激!
<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>