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

Framework .NET Discussion :

[WPF] ListBox sélectionner des élément par défaut


Sujet :

Framework .NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut [WPF] ListBox sélectionner des élément par défaut
    Bonjour

    J'ai une listBox liée (binding) à une collection. j'aimerais qu'une partie de ses éléments soient sélectionnés "par défaut" en fonction du contenu d'une autre collection. est-ce possible ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Hum... à première vue, je dirais en passant par le binding, un DataTemplate et IsSelected, ca devrait le faire

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Heu... oui, mais ma liste d'objet sélectionnés je la bind à quoi ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Help...

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JuTs Voir le message
    Heu... oui, mais ma liste d'objet sélectionnés je la bind à quoi ?

    Ta liste d'objet, elle est bindée à ta collection. Les objets sélectionnés, il sont pas bindé mais juste sélectionné en fonction du contenu de ta 2ème collection

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    ok, je vois ce que tu veux dire.
    Mais je n'y parviens toujours pas. Comment faire pour vérifier si un item se trouve dans ma collection d'objets sélectionnés ?

    ma tentative de template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <DataTemplate x:Key="accessoriesListBoxItemTemplate">
    	<ListBoxItem IsSelected="???" Content="{Binding Path=Name}"/>
    </DataTemplate>
    ma listBox
    <ListBox x:Name="AccessoriesListBox"
    ItemsSource="{Binding Source={StaticResource odpAccessories}}"
    ItemTemplate="{StaticResource accessoriesListBoxItemTemplate}"
    SelectionMode="Multiple"
    SelectionChanged="AccessoriesListBox_SelectionChanged"
    />
    côté code, je pourrais faire quelques chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaListeDObjetsSelectionnes.Contains(UnItemDeLaListeDObjets)
    Mais est-il possible d'exécuter quelque chose de ce genre depuis la template ?

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je vois bien une possibilité mais elle est un peu lourde

    Tu utilises un ObjectDataProvider dans ton XAML et dans ton code, tu as un méthode qui fait le Contains. Ensuite, tu bindes IsSelected à ton ODP (qui utilisera la méthode que tu auras défini).

    Mais c'est franchement pas génial

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Ok

    J'ai essayé, mais je ne comprends pas comment passer le paramètre à la méthode.

    mes ODP. Pour le 2e je ne sais pas si j'ai fais juste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ObjectDataProvider x:Key="odpAccessories" />
     
    <ObjectDataProvider x:Key="odpSelectedAccessories" ObjectType="{x:Type boCol:CRAccessoriesCollection}" MethodName="Contains">
    	<ObjectDataProvider.MethodParameters>
    		<bo:CRAccessoryBO></bo:CRAccessoryBO>
    	</ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

    ma template. Ici il faudrais que j'appelle la méthode Contains en lui passant l'item, mais heu... comment qu'on fait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <DataTemplate x:Key="accessoriesListBoxItemTemplate">
    	<ListBoxItem Content="{Binding Path=Name}" IsSelected="{Binding Source={StaticResource odpSelectedAccessories}}" />
    </DataTemplate>

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bo:CRAccessoryBO></bo:CRAccessoryBO>
    En faisant du binding sur tes listbox ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Heu... Je ne suis plus très sûr que je pense à la même chose que toi

    Dans le binding que j'ai mis dans le IsSelected, il faut bien j'appelle la méthode Contains, non ? Et je dois lui passer l'objet CRAccessoryBO (le listBoxItem) courant. C'est pas à ça que tu pensais ?

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Hum.. là, je commence à plus rien comprendre, c'est un peu trop fouilli... Il serait bien de tout reposer à plat et de voir si tu t'en sors plus simplement...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Alors voilà :

    J'ai une listBox et deux collections. La première contient une liste d'accessoires. La deuxième contiens les accessoires qui auront été sélctionnés dans la liste.
    Lorsque je démarre l'application, je voudrais que les éléments de la la 1e collection (la listBox) soient sélectionnés s'ils se trouvent dans la 2e collection.

    Toutes ces données proviennent d'une base de données.


    Après réflexion, je me demande si je ne pourrais pas gérer tout ça côté code. Mais pour ça il faudrais que je fasse quelques modification... je vais essayer...



    [mode hors-sujet]
    Je viens de relire ton article sur le développement en couche. et j'ai une question (oui, encore ). Si on sais qu'une classe ne sera pas instanciée plusieurs fois, y a-t-il un intérêt à utiliser un singleton ? A la limite, une classe contenant des méthodes statiques ne pourrait-elle pas suffire
    [mode hors-sujet]

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Bon ça devrait aller.

    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int nbItems = AccessoriesListBox.Items.Count;
     
    for(int i=0; i<nbItems; i++)
    {
    	if (CRCollections.Reports.Current.UsedAccessories.Contains((CRAccessoryBO)AccessoriesListBox.Items[i]))
    	{
    		((ListBoxItem)AccessoriesListBox.Items[i]).IsSelected = true;
    	}
     
    }
    Juste un problème, le cast ne fonctionne pas. Logique puisque Items contient des objets de type CRAccessoryBO. Je pensais me servir de la méthode FindParentOfType que tu m'avais donné il y a quelque temps mais le problème est qu'elle à besoin d'un DependencyObject en paramètre. Arrgghhhh !!!


  14. #14
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JuTs Voir le message
    [mode hors-sujet]
    Je viens de relire ton article sur le développement en couche. et j'ai une question (oui, encore ). Si on sais qu'une classe ne sera pas instanciée plusieurs fois, y a-t-il un intérêt à utiliser un singleton ? A la limite, une classe contenant des méthodes statiques ne pourrait-elle pas suffire
    [mode hors-sujet]

    Oui, tu peux passer par une classe statique

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Cette fois-ci c'est bon (je cherche vraiment trop loin (et compliqué) ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ObservableCollection<Object> tmp = new ObservableCollection<Object>();
     
    foreach (CRAccessoryBO accessory in CRCollections.Reports.Current.UsedAccessories)
    {
    	tmp.Add(accessory);
    }
     
    foreach (CRAccessoryBO accessory in tmp)
    {
    	AccessoriesListBox.SelectedItems.Add(accessory);
    }

    Citation Envoyé par Thomas Lebrun Voir le message
    Oui, tu peux passer par une classe statique
    Ok, mais est-ce qu'il peut y avoir (dans ce cas là) un intérêt à utiliser un singleton plutôt qu'une classe statique ?

  16. #16
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JuTs Voir le message
    Ok, mais est-ce qu'il peut y avoir (dans ce cas là) un intérêt à utiliser un singleton plutôt qu'une classe statique ?
    Non, pas trop d'intéret d'utiliser un singleton dans ce cas là: mais comme toujours, cela dépend des cas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2012, 13h21
  2. sélectionner un élément par défaut dans une liste déroulante
    Par touf35 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 03/06/2008, 18h08
  3. Réponses: 5
    Dernier message: 03/02/2006, 12h12
  4. Réponses: 2
    Dernier message: 10/05/2004, 11h20
  5. [MFC] Affichage des Scroll par défaut
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 05/02/2004, 19h44

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