Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

События отрабатывают самостоятельно WPF

В общем, столкнулся я с NullReferenceException и, в результате (длительной) отладки, обнаружил, что обработчик событий ComboBox.SelectionChanged вызывает метод-обработчик при старте приложения. Разметка ComboBox:

По идее такого не должно быть, или я ошибаюсь? Если нужны какие-то части программного кода, пишите, отвечу.


Ответ

По умолчанию ни один элемент не выделен. При этом SelectedIndex равен -1
Если вы меняете его на 0, то, разумеется, вызовется обработчик — вы ведь сами это попросили!
Если это нежелательно, можно сделать, например, следующее:
Вы можете завести булев флаг, и взвести его в конструкторе, после InitializeComponent (этот метод считывает и интерпретирует XAML). Флаг можно проверить в обработчике. Вы можете подписаться на изменения в code-behind вручную, после InitializeComponent Вы можете проанализировать в обработчике предыдущее состояние выделенного элемента, заглянув в SelectionChangedEventArgs Вы можете сделать код обработчика более общим, чтобы он не падал, будучи вызванным в момент, когда ни один элемент не отмечен.
Я бы порекомендовал попробовать последний вариант.

Комментариев нет:

Отправить комментарий