2010-05-04 3 views
7

Se ho un ComboBox che ha un evento SelectionChanged, si attiva quando carico il controllo.XAML ComboBox SelectionChanged Fires OnLoad

Così al caricamento della pagina imposto l'evento SelectedValue e l'evento SelectionChanged che non è quello che voglio che accada.

Qual è l'apporach accettato per fermare questo?

risposta

12

due soluzioni ovvie a questo sarebbe 1) Attendere che l'evento Loaded della finestra/Pagina/UserControl che contiene il ComboBox e collegare SelectionChanged lì ... ad esempio nel costruttore:

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

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

o 2) Verificare che la casella combinata ha caricato nella selezione cambiato gestore prima di fare qualsiasi cosa e tornare se non ha ... ad esempio nel gestore:

if (!cmbBox.IsLoaded) 
     return; 

io preferirei il numero 1 in quanto non richiede la controlla ogni volta che viene attivato il gestore di SelectionChanged.

+0

Grande grazie per questo – griegs

+1

Grazie E 'molto utile ... – KomalJariwala

+0

dove devo mettere la prima soluzione ... – SANDEEP

1

ho dovuto affrontare una situazione particolare:

Se si utilizza un perno, e prematuramente la cottura di controllo è in PivotItem> 0, si avrà ancora il problema.

In tal caso, sembra questo.Loaded() si riferisce solo a PivotItem "0" e la modifica ad altro PivotItem nell'interfaccia utente genererà comunque degli eventi.

In tal caso, la soluzione è (con il vostro esempio):

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