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 : gérer deux Bindings (MVVM)


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Par défaut Datagrid : gérer deux Bindings (MVVM)
    Bonjour à tous,
    Pour le contexte, j'ai une Datagrid de "Mission" avec un statut : Ferme (booléen)

    J'ai une Datagrid possédant un Trigger pour pouvoir gérer l'évènement de sélection de ligne.

    J'ai également, sur certaines lignes de cette Datagrid, des HyperlinkButton pour modifier le statut d'une mission. Le bouton apparaît lorsque le statut est à faux.

    Dans la View :
    Code xml : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
      <sdk:DataGrid x:Name="DataGridMission"
                                                    ItemsSource="{Binding Path=DataGridMission, Mode=TwoWay}"
                                                    IsReadOnly="True" AutoGenerateColumns="False" ColumnWidth="SizeToCells" SelectedIndex="{Binding Path=SelectedIndex, Mode= TwoWay}" >
                                                <i:Interaction.Triggers>
                                                    <i:EventTrigger EventName="SelectionChanged">
                                                        <cmd:EventToCommand Command="{Binding SelectionnerCommand}"
                                                                CommandParameter="{Binding SelectedItems, ElementName=DataGridMission, Mode=TwoWay}" />
                                                    </i:EventTrigger>
                                                </i:Interaction.Triggers>
                                                <sdk:DataGrid.Columns>
                                                    <sdk:DataGridTextColumn x:Name="ClientCol"
                                                            Binding="{Binding Path=Client}" Header="Client" />
                                                    <sdk:DataGridTextColumn x:Name="DateDebutCol"
                                                            Binding="{Binding Path=DateDebut}" Header="Début" />
                                                    <sdk:DataGridTextColumn x:Name="DateFinCol"
                                                            Binding="{Binding Path=DateFin}" Header="Fin" />
                                                    <sdk:DataGridTextColumn x:Name="RessourceCol"
                                                            Binding="{Binding Path=Ressource}" Header="Ressource" />
                                                    <sdk:DataGridTextColumn x:Name="FermeCol" Binding="{Binding Path=Ferme}"
                                                            Header="Ferme" Width="SizeToHeader"/>
                                                    <sdk:DataGridTemplateColumn>
                                                        <sdk:DataGridTemplateColumn.CellTemplate>
                                                            <DataTemplate>
                                                                <StackPanel Orientation="Horizontal">
                                                                    <HyperlinkButton Visibility="Visible" x:Name="Ferme"
                                                                            IsEnabled="{Binding Path=EnableFerme}"
                                                                            Opacity="{Binding Path=OpacityFerme}"
                                                                            Height="20" Width="20"
     
                                                                            Command="{Binding Path=FermeCommand}">
                                                                        <HyperlinkButton.Background>
                                                                            <ImageBrush
                                                                                    ImageSource="/TAF.View;component/Assets/Images/zoom.png"
                                                                                    Stretch="Fill" />
                                                                        </HyperlinkButton.Background>
                                                                    </HyperlinkButton>
                                                                </StackPanel>
                                                            </DataTemplate>
                                                        </sdk:DataGridTemplateColumn.CellTemplate>
                                                    </sdk:DataGridTemplateColumn>
                                                </sdk:DataGrid.Columns>
                                            </sdk:DataGrid>

    Dans la ViewModel :

    Code c# : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
     
     
            public ICommand OKCommand { get; internal set; }
            public ICommand FermeCommand { get; internal set; }
            public ICommand SelectionnerCommand { get; set; }
     
     private void InitCommandes()
            {
                OKCommand = new RelayCommand(() => OkCommandAction());
                FermeCommand = new RelayCommand(() => FermeCommandAction());
                SelectionnerCommand = new RelayCommand<IList>((IList items) => Selectionner_Action(items));
            }
     
     
     private void FermeCommandAction()
            {
                MessageBox.Show("test");
     
            }
     
      private void Selectionner_Action(IList Items)
            {
                    IEnumerator ilm = Items.GetEnumerator();
                    if (ilm.MoveNext())
                        SelectedMission = ilm.Current as RechercheMissionPerso;
                    else
                        SelectedMission = null;
     
                    if (SelectedMission != null)
                    {
     
                        //envoi vers la page correspondante
                    }
     
                }
     
            }

    Maintenant, le problème qui se pose est que lorsque je veux cliquer sur le bouton pour changer le statut d'une mission, l'évènement de sélection de la ligne se fait avant. Je ne peux jamais cliquer sur le bouton.

    Je ne sais pas quoi faire pour régler ce problème...
    J'aimerai pourvoir faire quelque chose comme : Si je clique sur le bouton, alors on fait pas l'évènement de la sélection de ligne. Ou alors est-il possible d'avoir une propriété que je pourrais binder pour savoir si le bouton a été cliqué ou non ?

    Merci à ceux qui peuvent m'aider !

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    la propriété Tag du bouton, tu peut essayer de la bindé à ce que tu veux, et tu abonnent le bouton dans ton templat à l’événement Click qui effectue un traitement générique : il modifie ce qu'il y a dans son Tag à partir du sender, si c'est Bindé en Tow Ways alors ça vas modifier la source

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Par défaut
    Citation Envoyé par s.toubal Voir le message
    la propriété Tag du bouton, tu peut essayer de la bindé à ce que tu veux, et tu abonnent le bouton dans ton templat à l’événement Click qui effectue un traitement générique : il modifie ce qu'il y a dans son Tag à partir du sender, si c'est Bindé en Tow Ways alors ça vas modifier la source
    Je ne vois pas comment faire ça en avec le pattern MVVM...

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Par défaut
    Citation Envoyé par Prismal Voir le message
    Je ne vois pas comment faire ça en avec le pattern MVVM...
    Je me suis pas encore mis au MVVM, donc je pourrais pas t'en dire +

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Tu veux dire qu'il faut que tu fasse la sélection avant de pouvoir cliquer sur l'hyperlink?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 20
    Par défaut
    Citation Envoyé par chrisdot Voir le message
    Tu veux dire qu'il faut que tu fasse la sélection avant de pouvoir cliquer sur l'hyperlink?
    Non, pas vraiment.
    Quand je fais la sélection, j'ai un évènement qui me fait changer de page.
    Quand je clique sur l'hyperlinkbutton, l'évènement de sélection se déclenche aussi, alors qu'il ne faudrait pas.
    Du coup, l'action de l'hyperlinkbutton ne se fait pas.

Discussions similaires

  1. 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
  2. Réponses: 2
    Dernier message: 21/08/2006, 21h27
  3. [RegEx] Gérer deux possibilités et leur associer une valeur 0/1
    Par speed_man002 dans le forum Langage
    Réponses: 3
    Dernier message: 21/09/2005, 18h32
  4. [CVS] gérer deux CVS pour un projet
    Par tmcgrady dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 02/03/2005, 15h48
  5. [Jacob] gérer deux versions de Word installées
    Par difdaf dans le forum Documents
    Réponses: 2
    Dernier message: 16/07/2004, 18h32

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