Combobox dans TabItem : impossible d'initialiser Combobox.SelectedIndex
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:
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> |
Code Behind (C#) :
Code:
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;
}
} |
Est-ce que quelqu'un sait comment faire autrement (proprement*) ?
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.