2010-05-04 11 views
7

Jeśli mam element ComboBox z zdarzeniem SelectionChanged, jest on uruchamiany podczas ładowania kontrolki.XAML ComboBox SelectionChanged Fireres OnLoad

Podczas ładowania strony ustawiam zdarzenia SelectedValue i SelectionChanged, co nie jest tym, co chcę.

Jaka jest akceptowana aplikacja do zatrzymania tego?

Odpowiedz

12

Dwa oczywistych rozwiązań byłoby 1) Poczekaj, aż Loaded przypadku okien/strony/UserControl zawierającego ComboBox i zahaczyć SelectionChanged tam ... na przykład w konstruktorze:

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

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

lub 2) Sprawdź, czy ComboBox został załadowany do wyboru zmienił obsługi zanim cokolwiek i wrócić, jeśli nie ma ... na przykład w uchwycie:

if (!cmbBox.IsLoaded) 
     return; 

wolałbym numer 1, ponieważ nie wymagają sprawdzaj za każdym razem, gdy uruchamiany jest moduł obsługi SelectionChanged.

+0

Wielkie dzięki za to – griegs

+1

Dzięki Jest to bardzo pomocne ... – KomalJariwala

+0

gdzie mam umieścić swoje pierwsze rozwiązanie ... – SANDEEP

1

wychodził szczególną sytuację:

Jeśli używasz pivot, i przedwcześnie wypalania kontrolę w PivotItem> 0, klient będzie miał problem.

W takim przypadku wygląda na to, że .Loaded() odnosi się tylko do PivotItem "0", a zmiana na inny PivotItem w interfejsie użytkownika i tak będzie wywoływać zdarzenia.

W takim przypadku rozwiązaniem jest (z przykładu):

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