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 :

Listbox avec bouton dans item : recuperer selectedvalue ?


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut Listbox avec bouton dans item : recuperer selectedvalue ?
    Bonjour à tous,

    Je vais completer un topic récent concernant l'evenement click lancé par un bouton contenu dans un listbox :

    J'ai une source de données (ObservableCollection(Of Monobjet)) que je bind comme étant la source de mon listbox.
    Dans mon listbox, je place un itemtemplate possédant :
    - un textblock bindé sur une property de mon objet
    - un bouton dont le titre du bouton est bindé sur une property de mon objet

    Le bouton possede un évenement Button_Click.
    J'aimerai dans cet evenement click pouvoir récupérer le selectedValue de ma listbox (bah oui, en cliquant sur un bouton, logiquement, cela veut dire qu'on travaille sur un item en particulier) donc l'objet "monobjet" de mon observableCollection.

    Savez vous comment faire ceci ?
    J'ai bien vu la réponse du topic http://www.developpez.net/forums/d70...t-code-behind/ mais cela me parrait assez gros comme solution pour mon cas, j'ai l'impression de devoir sortir le bazooka pour tuer une mouche.
    Doit bien y avoir une soluce toute bete pour faire ca non ?

    Merci d'avance
    @++

  2. #2
    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
    Un solution simple, et plus dans l'esprit de WPF : utilise une commande

    Par exemple, tu définis une commande ItemClick dans une classe MyCommands :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MyCommands
    {
        public static RoutedUICommand ItemClick = new RoutedUICommand("ItemClick", "ItemClick", typeof(MyCommands));
    }
    Et dans ton ItemTemplate, tu affectes la commande au bouton, et le DataContext au CommandParameter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button Command="my:MyCommands.ItemClick" CommandParameter="{Binding}" .../>
    Et bien sûr tu crées un CommandBinding pour exécuter la commande...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Salut,

    Merci pour ta réponse.
    Pour le moment, je n'ai pas eu le temps d'etudier le fonctionnement des commandes. Mais j'ai l'impression que je vais devoir y passer tres vite car je butte sur une autre problématique qui a mon avis peut trouver réponse via les commandes.
    Je m'explique :

    J'ai un objet nommé gestionnaire.
    A l'interieur de celui ci, j'ai plusieurs objets en propriétés :
    - Comptes (qui est une observablecollection(of compte) )
    - Budgets (qui est une observablecollection(of Budget) )
    - Operations (qui est une observablecollection(of Operation) )

    Une operation porte sur un compte et sur un budget.
    J'ai bindé deux listbox : une sur les comptes dispos (j'affiche le nom), une sur les budgets (j'affiche le nom et une image)

    Avec le databinding, je peux faire des trucs super cools mais là ou je bloque c'est sur le binding un peu complexe :

    Dans ma listbox bindée sur les budgets, j'aimerai ajouter une donnée supplémentaire qui serait le total des dépenses concernant le compte sélectionné pour le budget (une operation possede une property Montant)
    Donc pour cela, je ne peux pas seulement faire une property simple sans parametre puisque je suis obligé de lui soumettre le compte sélectionné.

    Je ne sais vraiment pas comment faire à ce niveau pour pouvoir faire un binding simple et propre

    Une idée ? utiliser les commandes peut etre ?

    Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Je ne sais pas quels objets tu as sous la main, mais peut-être qu'un MultiBinding pourrait faire l'affaire. tu peux associer au MultiBinding un Converter (comme c'est le cas pour un Binding simple) dans lequel tu fais éventuellement des opérations.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    C'est bien là toute la complexité :

    - Il est difficile de pouvoir expliquer le projet complet (bien que ce soit un projet relativement simple)
    - Je suis bloqué par manque de connaissances concernant le binding et autres fonctionnements en wpf.

    Comment expliquer mon projet...
    En gros, je me fais une petite appli de gestion de comptes dont voici les classes :

    - Operation : contient les propriétés "Id_ope", "Id_Compte", "Id_Budget", "Montant", "Date_Ope"
    - Compte : contient les propriétés "Id_Compte", "Nom"
    - Budget : contient les propriétés "Id_Budget", "Nom", "Montant_Mensuel"

    - Une classe gestion Comptes contenant les propriétés :
    + Comptes : observableCollection(Of Compte)
    + Budgets : observableCollection(Of Budget)
    + Operations : observableCollection(Of Operation)

    Mon soucis se pose au niveau du filtrage par compte (en l'occurence)
    Au départ, j'etais parti pour faire des objets totalement indépendants (ormis pour les operations qui elles portent les id des comptes et budgets, pour justement pouvoir recouper tout ca).
    Mais si je veux pouvoir afficher le total des operations par budget (et ce dans le binding associé à ma collection de budget) je suis obligé de faire porter une propriété compte à ma classe budget pour savoir quelles opérations je dois choisir lors du calcul du total de mon budget.

    Bref, j'ai plus l'impression que c'est un mic mac entre probleme de conception et compréhension...

    Donc si jamais il y a quelque chose qui te met la puce à l'oreille (une façon de faire ou peu importe) je suis interessé, mais sinon, je vais essayer de revoir mon schéma... j'ai peut etre mal étudié mon truc...

  6. #6
    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
    OK... je crois que tu es mûr pour MVVM (Model-View-ViewModel)
    C'est un nouveau design pattern créé spécifiquement pour tirer parti des fonctionnalités de WPF (bindings, commandes, etc).

    En fait, ton problème principal est qu'il n'est pas toujours facile (ou possible) de binder directement l'interface graphique sur les objets métier (par exemple pour calculer des totaux dans ton cas). MVVM introduit un couche intermédiaire entre l'interface (View) et les objets métier (Model) : la couche ViewModel. Cette couche permet "d'adapter" le modèle à la vue, en présentant à la vue un objet sur lequel elle peut se binder facilement, et des commandes qui permettent de réaliser des opérations sur le modèle.

    Il y a un tutoriel tout neuf ici :
    http://japf.developpez.com/tutoriels...-et-testables/

    Et si tu lis l'anglais, je te conseille aussi l'article de Josh Smith à ce sujet :
    http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
    L'exemple donné réalise notamment un total des éléments sélectionnés dans une liste, tu peux t'en inspirer

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Merci beaucoup ! ca va le faire ! bon vu l'heure tardive, je vais le lire demain midi pendant ma pause ^^

    Je reviendrais ici pour donner mon ressenti après la lecture !

    Merci !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Salut,

    Je reviens comme promis pour donner mon avis :

    Le MVVM est vraiment interessant ! maintenant il faut voir pour l'adapter à son cas ce qui est moins évident.
    En tous, cas, l'article français est bien plus compréhensible et plus concis que celui qui est en Anglais (d'ailleurs il m'a tellement saoulé que j'ai pas fini de le lire, il s'étale de trop pour pas grand chose ^^)

    Donc voila, si des personnes ont un besoin comme le mien, go to first link

    Encore merci !
    @+

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

Discussions similaires

  1. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  2. Tri Alphabétique Listbox avec Boutons Radios
    Par ljuboja78 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/05/2008, 09h55
  3. Double ListBox avec boutons..
    Par kazoumoulox dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/06/2007, 11h52
  4. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44

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