XAML ComboBox SelectionChanged Fires OnLoad - PullRequest
8 голосов
/ 04 мая 2010

Если у меня есть ComboBox с событием SelectionChanged, он срабатывает при загрузке элемента управления.

Итак, при загрузке страницы я установил событие SelectedValue и событие SelectionChanged, а это не то, чего я хочу.

Что является приемлемым способом остановить это?

Ответы [ 2 ]

14 голосов
/ 04 мая 2010

Два очевидных решения этого: 1) дождаться события Loaded в Window / Page / UserControl, которое содержит ComboBox, и подключить туда SelectionChanged ... например, в конструкторе:

// set the inital selected index for the combo box here...

this.Loaded += (s, args) =>
               {
                    cmbBox.SelectionChanged += 
                            new SelectionChangedEventHandler(HandleChanged);
               };

или 2) Убедитесь, что ComboBox загружен в обработчик изменения выбора, прежде чем что-либо делать, и вернитесь, если этого не произошло ... например, в обработчик:

if (!cmbBox.IsLoaded)
        return;

Я бы предпочел номер 1, поскольку он не требует проверки каждый раз при запуске обработчика SelectionChanged.

1 голос
/ 27 июня 2017

Я столкнулся с конкретной ситуацией:

Если вы используете сводную опцию, а элемент управления преждевременным срабатыванием находится в PivotItem> 0, у вас все еще будет проблема.

В этом случае кажется, что это. Loaded () ссылается только на PivotItem "0", и переход на другой PivotItem в пользовательском интерфейсе в любом случае вызовет события.

В этом случае решение (на вашем примере):

cmbBox.Loaded += (s, args) =>
           {
                cmbBox.SelectionChanged += 
                        new SelectionChangedEventHandler(HandleChanged);
           };
...