Как я могу поймать исключение, вызванное контролем данных? - PullRequest
1 голос
/ 28 марта 2012

У меня есть привязка данных NumericUpDown -Контроль, связанный так:

Binding b = new Binding("Value", myDataSource, "myProperty");
b.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
numericUpDown.DataBindings.Add(b);

Изменение myProperty имеет некоторые дополнительные эффекты и может вызвать исключение где-то еще ниже.

Некоторая информация, необходимая для проверки, будет ли выброшено исключение, недоступна в графическом интерфейсе, поэтому проверка ввода затруднена. Могу ли я поймать исключение, вызванное изменением значения, которое делает моя DataBinding? Или это плохой дизайн? Если да, то лучше ли мне предоставлять всю необходимую информацию для правильной проверки ввода или не использовать привязку данных для внесения сложных изменений?

Буду очень признателен за любую помощь!

richn

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Когда изменение значения привязки вызывает исключение, вы обнаружите, что иногда привязка поглощает его.

Чтобы получить его, вы можете подключиться к событию BindingComplete привязки (вам также может потребоваться установить для привязки значение FormattingEnabled также true). В этот момент любые исключения, обнаруженные во время записи привязки в источник данных, будут выделены в аргументах события (в его свойстве Exception). Уловка в том, что, к сожалению, вы, вероятно, обнаружите, что большая часть трассировки стека потеряна ...

РЕДАКТИРОВАТЬ : Если вы используете компонент BindingSource, он также выдает пузыри BindingComplete событий. Так что это может быть более быстрый способ захвата исключений, вызванных и другими привязками.

0 голосов
/ 30 марта 2012

Привязка данных не должна противоречить сложным свойствам.

Проверка должна выполняться при получении и установке свойства.

...