2010-05-04 9 views
7

Wenn ich eine ComboBox mit einem SelectionChanged-Ereignis habe, wird es beim Laden des Steuerelements ausgelöst.XAML ComboBox SelectionChanged löscht OnLoad

Also beim Laden der Seite ich die SelectedValue und das SelectionChanged-Ereignis ausgelöst, was ist nicht was ich möchte passieren.

Was ist der akzeptierte Ansatz, dies zu stoppen?

Antwort

12

Zwei offensichtliche Lösungen für das wären 1) Warten Sie, bis das Loaded-Ereignis des Window/Seite/Usercontrol, die die ComboBox enthält und Selection dort anschließen ... zB im Konstruktor:

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

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

oder 2) Überprüfen sie, ob die ComboBox in der Auswahl geändert Handler geladen ist, bevor sie etwas tun und zurück, wenn es nicht ... zB im Handler hat:

if (!cmbBox.IsLoaded) 
     return; 

ich würde es vorziehen, Nummer 1, da es nicht die erforderlich Überprüfen Sie jedes Mal, wenn der SelectionChanged-Handler ausgelöst wird.

+0

Großer Dank für den – griegs

+1

Dank Es ist sehr hilfreich ... – KomalJariwala

+0

wo ich Ihre erste Lösung setzen muß ... – SANDEEP

1

stand ich vor einer besonderen Situation:

Wenn Sie eine Pivot verwenden und vorzeitig Kontrollbrand in PivotItem> 0, werden Sie immer noch das Problem.

In diesem Fall scheint es, dass this.Loaded() bezieht sich nur auf PivotItem "0", und die Änderung zu anderen PivotItem in der Benutzeroberfläche wird Ereignisse dennoch auslösen.

In diesem Fall ist die Lösung (mit Ihrem Beispiel):

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