2010-05-04 24 views
7

Si tengo un ComboBox que tiene un evento SelectionChanged, se dispara cuando estoy cargando el control.XAML ComboBox SelectionChanged Fires OnLoad

Por lo tanto, al cargar la página, configuro los eventos seleccionados SelectedValue y SelectionChanged, que no es lo que quiero que ocurra.

¿Cuál es la recomendación aceptada para detener esto?

Respuesta

12

dos soluciones obvias para esto serían 1) Esperar hasta que el evento Loaded de la ventana/Página/control de usuario que contiene el cuadro combinado y conectar SelectionChanged allí ... por ejemplo, en el constructor:

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

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

o 2) Comprobar que el cuadro combinado se ha cargado en el controlador cambiado la selección antes de hacer nada y volver si no tiene ... por ejemplo, en el controlador:

if (!cmbBox.IsLoaded) 
     return; 

yo preferiría número 1, ya que no requiere la compruebe cada vez que se dispara el controlador SelectionChanged.

+0

Grandes gracias por eso – griegs

+1

Gracias Es muy útil ... – KomalJariwala

+0

donde tengo que poner su primera solución ... – SANDEEP

1

que se enfrentó a una situación particular:

Si está utilizando un pivote, y prematuramente control de disparo está en PivotItem> 0, de todas maneras tendrá el problema.

En ese caso, parece que this.Loaded() solo se refiere a PivotItem "0", y al cambiar a otro PivotItem en la UI se dispararán los eventos de todos modos.

En ese caso, la solución es (con el ejemplo):

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