Связывание и валидация WPF - PullRequest
       0

Связывание и валидация WPF

1 голос
/ 01 декабря 2010

У меня есть проблема с проверкой в ​​WPF, которую я не могу решить.У меня есть класс (который реализует IDataErrorInfo), который использует свойство как-то.

private double? _SizeSearchValue;
public double? SizeSearchValue
{
  get { return _SizeSearchValue; }
  set
  {
    _SizeSearchValue = value;
    NotifyChange("SizeSearchValue");
    ValidateInputRow("SizeSearchValue");
  }
}

Он связан с текстовым полем в XAML, как это.

      <StackPanel Orientation="Horizontal">
        <TextBlock VerticalAlignment="Center"  Text="Size:"/>
        <ComboBox Text="{Binding SizeSearchOption, ValidatesOnDataErrors=True}"/>
        <TextBox Text="{Binding SizeSearchValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=False}"/>
      </StackPanel>

ValidateInputRow ()Функция в установщике свойств обычно проходит и запускает мои пользовательские процедуры проверки и соответственно устанавливает ошибки, чтобы ComboBox и TextBox в упомянутом выше StackPanel имели красную рамку.Все работает отлично, пока я не помещу нечисловую строку в текстовое поле (например, «Abc»).

При вводе строки привязка выполняет проверку по умолчанию, вызывается FormatException и текстовое поле получает красную рамкупо обыкновению.Моя проблема с этим заключается в том, что моя пользовательская процедура проверки никогда не запустится, потому что установщик свойств в моем классе никогда не вызывается.

Я понимаю, почему это происходит, но мне было интересно, знает ли кто-нибудь способ перехватить событие или обидчивое исключение FormatException, чтобы я мог запустить свою пользовательскую проверку по факту.Я не могу понять это.

1 Ответ

1 голос
/ 01 декабря 2010

ОК, похоже, я ответил на свой вопрос. Я посмотрел далее в трассировку стека FormatException и обнаружил, что в процесс вовлечен 'IValueConverter', поэтому ..... Решение состоит в том, чтобы использовать конвертер, подобный так:

<TextBox Text="{Binding SizeSearchValue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource TestConverter}}"/>

В моем случае я просто очень быстро взбил один (TestConverter) и связал его с моими пользовательскими правилами валидации. Задача решена. Интересно, есть ли какие-нибудь эквивалентные решения проблемы?

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