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 :

mvvm: Command sur bouton dans un datagrid ne fonctionne pas


Sujet :

Silverlight

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut mvvm: Command sur bouton dans un datagrid ne fonctionne pas
    Bonjour,

    Dans une page, j'ai un le bouton suivant qui fonctionne à merveille:
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     <Button  Command="{Binding CreateCommand}" Height="22"   Width="22" ToolTipService.ToolTip="Ajouter un nouvel utilisateur" >
                                        <Image Margin="0" Source="/myAppli ;Component/Images/Add.png" Stretch="Fill"/>
                                    </Button>

    le même bouton que je mets dans un datagrid, et le Command ne fonctionne plus !!

    Code xaml : 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
    22
    23
     
    <sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding JUsers,Mode=TwoWay, UpdateSourceTrigger=Default}" SelectedItem="{Binding SelectedJUser , Mode=TwoWay}"  HorizontalAlignment="Left" Margin="22,4,0,0" Name="dataGrid1" VerticalAlignment="Top" >
     
     <sdk:DataGrid.Columns>
                    <sdk:DataGridTextColumn Header="Nom" Binding="{Binding JUserNom,Mode=TwoWay}" Width="150" IsReadOnly="True" />
     
                    <data:DataGridTemplateColumn x:Name="bkTemplateColumn" Header="login Internet" Width="200"  >
                        <data:DataGridTemplateColumn.CellTemplate >
                            <DataTemplate x:Name="bkDataTemplate" >
                                <StackPanel Orientation="Horizontal">
     
                                    <Button  Command="{Binding CreateCommand}" Height="22"   Width="22" ToolTipService.ToolTip="Ajouter un nouveau JUser" >
                                        <Image Margin="0" Source="/myAppli ;Component/Images/Add.png" Stretch="Fill"/>
                                    </Button>
     
                                </StackPanel>
     
                            </DataTemplate>
                        </data:DataGridTemplateColumn.CellTemplate>
                    </data:DataGridTemplateColumn>
     
                </sdk:DataGrid.Columns>
            </sdk:DataGrid>

    La seule explication que je vois est que mon Datagrid est lui-même bindé à "JUsers" et que mon "Command="{Binding CreateCommand}" " n'est pas une propriété de "JUsers".

    Comment lier juste ce bouton au ICommand de mon ViewModel ?

  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
    C'est en effet un problème de DataContext comme tu l'indiques.

    Pour que ça marche, il faut la collection source (JUsers) expose, pour chacun des éléments, une commande.

    Donc, si ta JUsers est rempli avec des JUser, il faut que la classe JUser expose une commande CreateCommand.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Cà c'est plutôt embêtant, parceque me mon JUser est une entité qui me vient de SQLServer, Edmx,...

    Donc ça voudrait dire que je dois me créer un JUser2 qui hérite de JUser et qui lui rajoute quoi ? une ICommand ?

    Entretemps, j'ai trouvé cet intéressant post:

    http://stackoverflow.com/questions/5...-in-a-datagrid

    qui traite bien du même problème, mais je pense que ça doit marcher en WPF et pas en Silverlight. Merci de ton aide.

    PS: sinon, il me reste à utiliser le bon vieux Click qui accède en codebehind directement à ma procédure dans mon ViewModel...

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Le coup du ElementName marche en silverlight normalement. (Ou y'a une subtilité du genre ca marche dans une listbox et pas dans une datagrid).
    Sinon t'as la possibilité de passer par un proxy déclaré en ressources et qui référence le datacontext de ton usercontrol.
    Enfin, les classes de proxy wcf sont déclarées en partial donc tu peux rajouter un bout partial sans en dériver.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    chez moi, en tous cas, et je l'ai testé deux fois:

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button x:Name="btnJUser"  Width="50"   Command="{Binding DataContext.CreerEffacerLoginInternetCommand, ElementName=dataGrid1}" ToolTipService.ToolTip="{Binding JUserAspNetUserId, Converter={StaticResource locTooltipAddDeleteConverter}}" Height="20" Margin="5,0">

    le elementName ne fonctionne pas

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Un de mes collègues a écrit un post à ce sujet:
    http://cyril.cathala.org/blog/2011/0...-datatemplate/

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci Nathanael pour ce lien très intéressant qui démontre bien que le datagrid est un cas plus difficile à traiter.

    J'ai fait une entorse au mvvm et j'ai finalement utilisé le code behind

    mais je garde ton lien sous le coude pour une prochaine fois.

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

Discussions similaires

  1. Double clique sur ligne d'un datagrid ne fonctionne pas sur ecran tactile
    Par slacky dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 07/05/2012, 16h43
  2. Selection sur bouton dans un Datagrid
    Par chrisdot dans le forum Silverlight
    Réponses: 5
    Dernier message: 30/03/2010, 10h11
  3. [FLASH 8 Pro] OnRelease sur bouton dans un SWF chargé!!
    Par Julien.alkaza dans le forum Flash
    Réponses: 14
    Dernier message: 13/04/2006, 07h55
  4. [C#] Modifier le text des boutons dans un datagrid
    Par Le-Cortex dans le forum ASP.NET
    Réponses: 3
    Dernier message: 11/01/2006, 10h17
  5. [C#] bouton dans un datagrid comment çà marche ?
    Par Nycos62 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/10/2005, 11h39

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