2010-05-04 20 views
7

Si un composant ComboBox comporte un événement SelectionChanged, il se déclenche lorsque je charge le contrôle. Par conséquent, au chargement de la page, je règle les événements SelectedValue et SelectionChanged, ce qui n'est pas ce que je veux.XAML ComboBox SelectionChanged Fires OnLoad

Quelle est l'approche acceptée pour arrêter cela?

Répondre

12

Deux solutions évidentes à ce seraient 1) Attendez que l'événement Loaded de la fenêtre/page/UserControl qui contient le ComboBox et le crochet jusqu'à SelectionChanged là ... par exemple dans le constructeur:

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

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

ou 2) Vérifier que le ComboBox a chargé dans la sélection gestionnaire changé avant de faire quoi que ce soit et revenir si elle n'a pas ... par exemple dans le gestionnaire:

if (!cmbBox.IsLoaded) 
     return; 

je préférerais le numéro 1 car il ne nécessite pas la vérifier chaque fois que le gestionnaire SelectionChanged est déclenché.

+0

Un grand merci pour que – griegs

+1

Merci Il est très utile ... – KomalJariwala

+0

où je dois mettre votre première solution ... – SANDEEP

1

Je fait face à une situation particulière:

Si vous utilisez un pivot et de contrôle de tir est trop tôt dans PivotItem> 0, vous aurez toujours le problème.

Dans ce cas, il semble que this.Loaded() ne fait référence qu'à PivotItem "0", et le passage à un autre PivotItem dans l'interface utilisateur déclenchera tout de même des événements.

Dans ce cas, la solution est (avec votre exemple):

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