IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Binding ListBox SelectedItem [MVVM]


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut Binding ListBox SelectedItem
    Bonjour à tous,

    Dans mon ViewModel, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<Template> Templates
    Template est une classe qui contient :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public string Name { get; set; }
    public bool IsSelected { get; set; }

    J'ai mon Xaml suivant :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ListBox ItemsSource="{Binding Templates}" Width="300" Margin="20,0,0,0" HorizontalAlignment="Left">
                    <ListBox.ItemTemplate>
                        <DataTemplate>  
                                <TextBlock Text="{Binding Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    En sachant que j'ai que deux éléments, pour le moment, dans ma liste de templates, comment faire pour que l'élément de ma liste dont la propriété "IsSelected" est à True fasse que l'item de ma ListBox soit sélectionné ?

    Merci d'avance pour vos réponses ?

  2. #2
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    Tu as la propriété IsSelected de ListBoxItem :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ListBox ItemsSource="{Binding Templates}" Width="300" Margin="20,0,0,0" HorizontalAlignment="Left"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" />
                        <DataTemplate.Triggers>
                            <DataTrigger Binding="{Binding IsSelected}" Value="True">
                                <Setter Property="ListBoxItem.IsSelected" Value="True"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il faut binder IsSelected dans le ItemContainerStyle :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ListBox ItemsSource="{Binding Templates}" Width="300" Margin="20,0,0,0" HorizontalAlignment="Left">
        <ListBox.ItemTemplate>
            <DataTemplate>  
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="IsSelected" Value="{Binding IsSelected}" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

    Par contre il faut que ta classe Template implémenter INotifyPropertyChanged, sinon le binding ne pourra pas détecter le changement

  4. #4
    Membre éclairé Avatar de blasil64
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 324
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il faut binder IsSelected dans le ItemContainerStyle :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ListBox ItemsSource="{Binding Templates}" Width="300" Margin="20,0,0,0" HorizontalAlignment="Left">
        <ListBox.ItemTemplate>
            <DataTemplate>  
                    <TextBlock Text="{Binding Name}" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="IsSelected" Value="{Binding IsSelected}" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>

    Par contre il faut que ta classe Template implémenter INotifyPropertyChanged, sinon le binding ne pourra pas détecter le changement
    Merci, ce code fonctionne très bien ! Mon item est bien sélectionné

    Merci pour vos réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MVVM + Listbox + Multiselect : Bind sur selecteditems ?
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 10/11/2010, 14h04
  2. [ListBox]Binding et SelectedItem
    Par Tod_sd dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 02/11/2009, 13h07
  3. ListBox.SelectedItem qui retourne un DataRowView
    Par sphynxounet dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/07/2009, 15h54
  4. problème binding listbox!
    Par damii1 dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 25/06/2009, 15h38
  5. Binding listbox avec datatemplate et récupération de valeur
    Par tom741 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 24/03/2009, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo