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 :

évènements dans un DataTemplate


Sujet :

Silverlight

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Par défaut évènements dans un DataTemplate
    Bonjour,
    J'aimerais comprendre comment gérer la gestion d'évènement dont la source se trouve dans un Datatemplate.

    Plus précisément :
    Je créé un nouveau control que je Template.
    Dans mon template j'ai un ItemsControl branché sur une collection myList.
    Maintenant, je veux déterminer la manière dont j'affiche les données et donc j'ajoute un DataTemplate. Pour chaque item de ma collection j'affiche une donnée et un bouton dont je veux gérer l'évènement click. Sur l'évènement Click je supprimerai l'élément lié de la collection...

    Comment faire ça proprement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ItemsControl x:Name="ItemsControlRoot" ItemsSource="{TemplateBinding myList}">                              
    <ItemsControl.ItemTemplate>
        <DataTemplate>                                
    	<Border BorderThickness="1">
    	<StackPanel Orientation="Horizontal">
    	    <TextBlock Text="{Binding}" />
              <Button Content="x" />
    	</StackPanel>
    	</Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    
    </ItemsControl>

  2. #2
    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
    Il n'y a pas de moyen simple de le faire.

    Tu peux au choix passer par une commande sur ton bouton (propriété Command bindée sur un ICommand dans ton contrôle), ou bien alors exposer une propriété ItemTemplate sur ton CustomControl qui sera TemplateBinding sur le ItemTemplate de ton ItemsControl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ItemsControl x:Name="ItemsControlRoot" ItemsSource="{TemplateBinding myList}" ItemTemplate="{TemplateBinding ItemTemplate}" />
    Pis quand tu ajoutes ton contrôle dans une page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <local:MonCustomControl myList="{Binding xxx}">
       <local:MonCustomControl.ItemTemplate>
          <DataTemplate>
             <Button Click="xxx" />
          </DataTemplate>
       </local:MonCustomControl.ItemTemplate>
    </local:MonCustomControl>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Par défaut Je ne comprends pas...
    Je ne vois pas l'intérêt d'exposer le ItemTemplate... Le problème reste le même non ? A savoir : la gestion de l'évènement Click.

    De mon côté j'ai trouvé une autre solution en me documentant sur le modèle évènementiel de Silverlight. Je peux gérer l'évènement MouseLeftButtonUp au niveau du ItemsControl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void _ic_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                TextBlock tb1 = e.OriginalSource as TextBlock;
                if (tb1 != null && tb1.Name == "btDelete")
                {
                    // suppression 
                    RemoveItem(tb1.Tag);
                }
     
            }
    SAuf que là je ne peux pas utiliser un Bouton à proprement parler car il semble qu'un bouton interrompt la propagation de cet évènement. En l'occurence j'utilise un TextBlock.

    Merci pour la réponse en tout cas.

  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 yohann_ Voir le message
    Je ne vois pas l'intérêt d'exposer le ItemTemplate... Le problème reste le même non ? A savoir : la gestion de l'évènement Click.
    Parce que la page où tu vas mettre ton UserCOntrol aura un page pour le code-behind, et donc ton évènement click pourra être intercepté.

    Essaye donc tu verra que ça fonctionne.

Discussions similaires

  1. Gestion des évènements dans un DataTemplate
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 17/11/2008, 11h21
  2. Réponses: 10
    Dernier message: 21/02/2007, 20h16
  3. [CSS] Définir un évènement dans un CSS
    Par PierrotY dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 30/03/2005, 11h49
  4. Perte de gestionnaire d'événements dans une fenêtre
    Par Benjamin GAGNEUX dans le forum Composants VCL
    Réponses: 15
    Dernier message: 23/08/2004, 20h14
  5. Modifier un événement dans le code
    Par HT dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2003, 09h46

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