Validation.Error не вызывает обработчик - PullRequest
2 голосов
/ 19 марта 2012

У меня проблемы с проверкой.Я создал специальный валидатор с именем 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 Ответ

8 голосов
/ 19 марта 2012

У вас не все, что вам нужно установить в 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>

У меня есть следующий пример, и я загрузил его и проверил, что вы делаете, и у меня возникла та же проблема.http://www.wpfsharp.com/2012/02/03/how-to-disable-a-button-on-textbox-validationerrors-in-wpf/

Чтобы доказать, что мое предложение работает, я добавил свойства, которые я упоминал, к своему примеру, и добавил в свою сетку всплывающее событие Validation.Error = "MainGrid_Error", и оно срабатывает.

Добавление этих свойств вызывает всплывающее событие в моем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...