J'ai un TabControl dont le contenu de chaque TabItem est une vue maître-détail.
Pour le maître, j'utilise une boîte de liste dont le nom est ItemsSource
est lié à une collection dans mon ViewModel. La sélection d'un élément dans la liste affiche les détails de cet élément particulier dans une grille sur le côté.
Lorsque je passe à un autre onglet, puis que je reviens à l'onglet d'origine, la sélection de la boîte de liste semble être perdue.
Que puis-je faire pour maintenir les sélections des boîtes de liste dans chaque onglet lorsque la sélection de l'onglet change ?
Dans le cadre d'une utilisation normale, les utilisateurs finaux devront "configurer" les vues détaillées comme ils le souhaitent pour une situation particulière, puis parcourir les onglets de temps en temps pour vérifier chaque système (chaque onglet fournit des détails sur les machines d'une ligne de produits différente).
Le TabControl ressemble à ceci :
<TabControl
ItemsSource="{Binding DiagCards}"
ContentTemplate="{StaticResource DiagCardViewTemplate}"
SelectedItem="{Binding SelectedDiagCard}" />
La vue de chaque élément de l'onglet comporte une boîte de liste qui ressemble à ceci :
<ListBox
ItemsSource="{Binding DiagCard.DevicesDetected}"
SelectedItem="{Binding SelectedDevice}"/>
Les détails sont affichés dans le TabItem à l'aide d'un ContentControl :
<ContentControl
Content="{Binding SelectedDevice}"
ContentTemplateSelector="{StaticResource SelectedDeviceTemplateSelector}"/>
Je dois noter qu'un test simple utilisant des TabItems et ListBoxes codés en dur fait semblent maintenir la sélection lorsque l'onglet change :
<TabControl>
<TabItem Header="tab 1">
<ListBox>
<ListBoxItem>
<TextBlock Text="item 1-1"/>
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="item 1-2"/>
</ListBoxItem>
</ListBox>
</TabItem>
<TabItem Header="tab 2">
<ListBox>
<ListBoxItem>
<TextBlock Text="item 2-1"/>
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="item 2-2"/>
</ListBoxItem>
</ListBox>
</TabItem>
</TabControl>
Mise à jour : J'ai mis IsSynchronizedWithCurrentItem="True"
sur la boîte de liste et tout semble bien se passer.