Связанные с данными WPF CheckBox есть исключения из набора значений - PullRequest
2 голосов
/ 28 апреля 2009

У меня есть элемент управления WPF CheckBox с привязкой к данным, который, по-видимому, использует исключения, генерируемые соответствующим установщиком свойств при переключении значения в пользовательском интерфейсе. Я знаю, что это может произойти, если я предоставлю ExceptionValidationRule для экземпляра Binding, но я дважды проверил, что ValidationRules для экземпляра Binding имеет нулевое число. Я также проверил стек вызовов на наличие обработчиков исключений, и ни один из них не существует. Тем не менее, выброшенное исключение не всплывает наверх и вызывает сбой в приложении, как я и ожидал.

Если я выбрасываю исключение из обработчика нажатия кнопки в том же интерфейсе, это исключение всплывает и вызывает сбой приложения, исключая какой-либо глобальный обработчик исключений.

Есть идеи?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 апреля 2009

Чтобы добавить к ответу itowlson, класс Binding предоставляет свойство UpdateSourceExceptionFilter , которое позволяет предоставлять логику, которая запускается, когда происходит исключение при обновлении источника. Он используется вместе с классом ExceptionValidationRule и позволяет вам делать что-то кроме добавления ValidationError в случае сбоя обновления.

2 голосов
/ 28 апреля 2009

Нет, это ожидаемое поведение: инфраструктура привязки данных WPF перехватывает исключения, вызванные сохранением значения из цели привязки обратно в источник. Я подозреваю, что это потому, что приложение не может настроить обработчик исключений вокруг операции сохранения (потому что он вызывается из кода WPF, а не из кода приложения), поэтому, если WPF этого не сделает, приложение будет аварийно завершено без шанс обработать исключение.

(В отличие от этого, в обработчике нажатий кнопок вы пишете код, чтобы у вас есть была возможность обрабатывать исключения. Поэтому WPF считает, что нормально разрешать распространение исключения, если вы решите не обрабатывать она.)

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