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 :

Silverlight 3 DataGrid MVVM


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut Silverlight 3 DataGrid MVVM
    Bonjour,

    Je réalise une application en Silverlight 3 avec le Pattern MVVM.
    J'ai ajouté une datagrid avec une colonne de bouton.

    Fichier XAML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <data:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding UserList}">
          <data:DataGrid.Columns>
               <data:DataGridTextColumn Header="Nom" Width="113" IsReadOnly="True" x:Name="Col1" Binding="{Binding Nom}"/>
                     <data:DataGridTemplateColumn.CellTemplate>
                          <DataTemplate>
                               <Button Content="Voir" cmd:ButtonBaseExtensions.Command="{Binding ViewCommand}"
    cmd:ButtonBaseExtensions.CommandParameter="{Binding ElementName=Col1, Path=Binding}"/>
                          </DataTemplate>
                      </data:DataGridTemplateColumn.CellTemplate>
                  </data:DataGridTemplateColumn>
              </data:DataGrid.Columns>
           </data:DataGrid>
    Dans le ViewModel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public ICommand ViewCommand { get; internal set; }
    ViewCommand = new RelayCommand<string>((user) => ExecuteViewCommand(user), (user) => true);
     
    public void ExecuteViewCommand(string user)
    {
        ....
    }
    Rien ne se passe quand je clique sur le bouton "Voir".
    Est-ce que c'est possible de coder un évènement d'un bouton dans une datagrid avec MVVM où il faut passer par le code behind ?

    Merci

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Le context de ta cellule est un élément de UserList (un objet User je suppose).

    Avec cmd:ButtonBaseExtensions.Command="{Binding ViewCommand}" le Framework cherche une command ViewCommand sur l'objet User. C'est normal qu'il ne se passe rien.

    Il faut revenir au viewModel qui est DataContext de la grid avec untruc dans le genre:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <Button
        cmd:ButtonBaseExtensions.Command="{Binding  Path=DataContext.ViewCommand,
            RelativeSource={RelativeSource 
            FindAncestor,
            AncestorType={x:Type Controls:DataGrid}}" />
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    Le problème c'est que FindAncestor n'existe pas en Silverlight 3.

  4. #4
    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
    Citation Envoyé par memotech Voir le message
    Le problème c'est que FindAncestor n'existe pas en Silverlight 3.
    Utilise un truc dans ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Button
        cmd:ButtonBaseExtensions.Command="{Binding  Path=DataContext.ViewCommand,
            ElementName=LayoutRoot}" />

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 24
    Par défaut
    J'avoue que je ne comprends pas très bien ou vous voulez en venir.
    C'est quoi DataContext.ViewCommand ?

  6. #6
    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
    Citation Envoyé par memotech Voir le message
    J'avoue que je ne comprends pas très bien ou vous voulez en venir.
    C'est quoi DataContext.ViewCommand ?
    On prend le DataContext du LayoutRoot, qui doit surement être ton ViewModel, et on bind sa propriété ViewCommand sur la commande de ton bouton.

Discussions similaires

  1. Silverlight / c# / Datagrid ne se remet pas a jour
    Par Tardiff Jean-François dans le forum C#
    Réponses: 2
    Dernier message: 14/03/2014, 11h23
  2. Réponses: 15
    Dernier message: 23/08/2011, 14h26
  3. MVVM et Datagrid : definir par binding la visibilité des colonnes
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 19/05/2009, 15h56
  4. Disparition de row dans DataGrid en Silverlight RTW
    Par matdur dans le forum Silverlight
    Réponses: 3
    Dernier message: 18/11/2008, 20h09

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