0 votes

WPF Maintien de la sélection de la ListBox lorsque l'onglet change

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.

2voto

Shaun Bowe Points 3390

D'après votre commentaire, je suppose que quelque chose est en train de changer dans votre viewmodel pour supprimer l'élément sélectionné. Pouvez-vous placer un point d'arrêt sur le setter de SelectedDevice et vérifier la pile d'appels ?

Pour tester cela, pouvez-vous supprimer le code SelectedItem={} et voir s'il reste sélectionné lorsque vous changez d'onglet ?

Pour répondre plus complètement, j'aurais besoin de voir plus de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X