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

Silverlight Discussion :

datagrid et binding sur bouton


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut datagrid et binding sur bouton
    bonjour

    j'essaye de mettre en place une datagrid avec pour chaque ligne deux boutons: modifier et supprimer.

    Voici le code que j'ai actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <data:DataGrid x:Name="dgInfosPersonne" ItemsSource="{Binding ListePersonnes, Mode=TwoWay, UpdateSourceTrigger=Default}" AutoGenerateColumns="False">
    	<data:DataGrid.Columns>
    		<data:DataGridTemplateColumn>
    			<data:DataGridTemplateColumn.CellTemplate>
    				<DataTemplate> 
    					<Button x:Name="btnSupprimerLigne" Content="Supprimer" cmd:ButtonBaseExtensions.Command="{Binding SupprimerLignePersonne}"/>
    				</DataTemplate>
    			</data:DataGridTemplateColumn.CellTemplate>
    		</data:DataGridTemplateColumn>
    		<data:DataGridTextColumn Binding="{Binding nom}" Header="Nom" Width="100" />
    		<data:DataGridTextColumn Binding="{Binding prenom}" Header="Prénom" Width="100" />
    		<data:DataGridTextColumn Binding="{Binding adresse}" Header="Adresse" Width="280" />
    		<data:DataGridTemplateColumn>
    			<data:DataGridTemplateColumn.CellTemplate>
    				<DataTemplate>
    					<Button x:Name="btnModifierLigne" Content="Modifier" cmd:ButtonBaseExtensions.Command="{Binding ModifierLignePersonne}"/>
    				</DataTemplate>
    			</data:DataGridTemplateColumn.CellTemplate>
    		</data:DataGridTemplateColumn>
    	</data:DataGrid.Columns>
    </data:DataGrid>
    là j'affiche une liste de personnes dans mon tableau. les colonnes sont dans l'ordre: supprimer(bouton), nom, prénom, adresse, modifier(bouton).

    j'ai mis mes commandes dans mon viewModel mais elles ne marchent pas.. (elles sont bien initialisées pour ça pas de pb).

    mon but est que sur clic du bouton supprimer par exemple, cela réfère à mon ICommand SupprimerLignePersonne, avec comme paramètre le numéro de ligne selectionné.. si vous avez des infos sur cette manip merci par avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    pour commencer... si ton binding est bien défini il n'y a aucun besoin, de définir un bouton modifier, car le binding peut être défini en TwoWay.

    là tu ne fait pas du mvvm, tu fait du je sais pas quoi, mais ca n'y ressemble pas
    ensuite ton bouton supprimer c'est bien de définir la commande, mais ton ICommand suppose l'élément Parameter... le problème c'est que nul part dans la définition de ta DataGrid et du bouton tu ne définir le CommandParameter pour justement fournir un paramètre à cette commande...
    pas étonnant que cela ne marche pas.

    ensuite, il est encore plus inutile d'avoir un bouton supprimer, car la datagrid pour peu que tu active l'option gère l'insertion, la suppression, la modification.

    ensuite pourquoi s'emmerder avec le numéro comme paramètre ? et récupérer l'élément courant dans ton ViewModel se serait pas plus pertirnant ?
    Il faut donc mettre la propriété IsSynchronizedWithCurrentItem de ta datagrid à True, si tu veux qu'elle synchronise l'élément courant sur la vue par défaut de la collection que tu as exposée.

    tout d'abord quel type de collection ou vue à tu exposée dans ton modelView.
    si tu as exposé une ObservableCollection a tu au moins récupéré la vue par défaut sur cette collection, dans ton modelView pour récupérer les sélections d'éléments courant de la part de ta Grid ?

    c'est étrange de procèder de la sorte, tu parle de viewmodel ce qui suppose bien un pattern MVVM, mais tu ne procède absolument pas comme dans les tutoriels MVVM disponibles sur le net, qui exposent tous une collection observable sur laquelle on s'inscrit à l'évènement SelectedItemChanged de la vue par défaut, côté viewmodel, avec la propriété IsSynchronizedWithCurrentItem définie à true côté UI, sur les contrôles de liste (listview, listbox, combobox, datagrid...)

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    si je demande c'est justement parceque je ne sais pas encore comment faire correctement du mvvm avec une datagrid, sinon je n'aurai pas posté

    déjà pour l'option de suppression, que faut il mettre pour que ça soit pris en compte.

    ensuite pour la modif je sais qu'en twoWay on peut directement saisir les changement, le problème est que je doit effectuer un traitement dans mon code métier pour savoir si la saisie est valide, c'est pour cela que j'aimerai passer par l'intermédiaire d'un ICommand, pour savoir si oui ou non je peux modifier..

    pour le paramètre du ICommand ok, j'ai essayé, mais pourquoi le mettre si meme mon ICommand ne passe déjà pas .. pareil, je suppose que l'élément à passer en paramètre serait le numéro de la ligne selectionné, et je viens d'ajouter un binding sur le selectedIndex de ma dataGrid pour avoir ce numéro côté viewModel.. ça ça marche..

    donc j'en suis un peut au même point.. si tu pouvais me montrer niveau code ce que ça donne ça serait bien pour que je puisse avoir les bonnes pratiques mvvm

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Par défaut
    slt,

    Moi sur le bouton je met des evenements "OnClick"

    Comme sa en code C# pour recup ta valeur tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class recup = (Class)dataGrid.selectItem
    Et sa te permet même d'afficher des messages de confirm

    A+

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    oui offspring mais le soucis c'est qu'il faut que j'utilise le mvvm. je peux conserver mon objet pour modification dans une propriété, et je binde le selectedItem à cette propriété, mais ce qu'il me faut là et que je n'arrive pas à gérer ce sont les ICommand bindées sur mes bouttons modifier et supprimer.. si j'arrive à avoir ça, j'aurai mon objet stoké, mon index, et donc je pourrai effectuer mes traitements..

    en fait je veux faire ce que tu me propose mais en utilisant mvvm et donc le databinding..

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    Il faut donc mettre la propriété IsSynchronizedWithCurrentItem de ta datagrid à True
    j'ai essayé avec cette méthode pour la suppression, bien que ça ne soit pas exactement ce que je souhaite faire, mais cette propriété n'existe pas pour une datagrid, du moins vs ne me le propose pas..

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Je dirais simplement que tu essaies que ton binding sur ta commande pointe sur un objet de type Personne, qui, je doute contient une commande.

    Essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <Button x:Name="btnSupprimerLigne" Content="Supprimer" cmd:ButtonBaseExtensions.Command="{Binding Path=DataContext.SupprimerLignePersonne, ElementName=dgInfosPersonne}"
    CommandParameter="{Binding Path=Id}" />

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    non ça ne marche pas non plus

  9. #9
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Elle se trouve dans quelle classe ta commande ?

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Par défaut
    ma commande est dans mon viewModel. j'ai le data context de mon user control défini comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <UserControl.DataContext>
            <Binding Source="{StaticResource Locator}" Path="ViewModelPersonnesStatic" />
        </UserControl.DataContext>
    par contre j'ai recopié mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Binding Path=DataContext.SupprimerLignePersonne
    dans ma commande..

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/10/2010, 15h34
  2. Réponses: 2
    Dernier message: 04/05/2010, 15h53
  3. Selection sur bouton dans un Datagrid
    Par chrisdot dans le forum Silverlight
    Réponses: 5
    Dernier message: 30/03/2010, 10h11
  4. Réponses: 1
    Dernier message: 12/05/2009, 09h50
  5. [2005] Datagrid et binding sur proc. stockée ?
    Par cedric_g dans le forum Windows Forms
    Réponses: 11
    Dernier message: 07/08/2007, 17h03

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