Bonjour tout le monde,
Dans une application WPF, j'ai une liste déroulante dans un onglet (on va parler en français d'abord, le code suivra). Lorsque l'utilisateur sélectionne cet onglet, la liste déroulante s'initialise et se place sur le premier élément.
Hors, cette dernière action relance l'évènement tabControl1_SelectionChanged et l'action se répète indéfiniment jusqu'au dépassement de pile.
Pour plus de clarté, voici les bouts de code :
XAML :Code Behind (C#) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <TabControl Name="tabControl1" SelectionChanged="tabControl1_SelectionChanged"> <TabItem Header="Tab1"> [...] </TabItem> <TabItem Header="Tab2"> <ComboBox Name="cb1" /> </TabItem> </TabControl>Est-ce que quelqu'un sait comment faire autrement (proprement*) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (tabControl1.SelectedIndex == 1) // si ont est sur Tab2 { Dictionary<string, string> DicoCbItems = new Dictionary<string, string>(); DicoCbItems.Add("lorem ipsum", "1"); DicoCbItems.Add("oui oui", "2"); DicoCbItems.Add("superman", "3"); Binding BindCb = new Binding(); BindCb.Source = DicoCbItems; cb1.DisplayMemberPath = "Key"; cb1.SelectedValuePath = "Value"; cb1.SetBinding(ComboBox.ItemsSourceProperty, BindCb); // prochaine instruction déclenche l'évènement tabControl1_SelectionChanged et // ça tourne en boucle jusqu'au dépassement de pile cb1.SelectedIndex = 0; } }
Si vous savez pourquoi ça fait cela, je suis aussi preneur, voire même beaucoup plus intéressé que pour le comment!
* : par "proprement", je veux dire plus proprement qu'un flag "bool Tab2IsInitializing" pour ne faire l'évènement qu'une fois à la fois, solution que j'ai rapidement mis en place.
Partager