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

Windows Presentation Foundation Discussion :

Récupérer item.Tag dans un DataTemplate


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut Récupérer item.Tag dans un DataTemplate
    Bonjour,

    Je voudrais récupérer la valeur des item.Tag d'un ListBox en cliquan sur l'item:

    XAML:

    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
     
    <Window.Resources>
            <DataTemplate x:Key="listBoxItem">
                <StackPanel Margin="3">
                    <StackPanel>
                        <ListBoxItem Tag="{Binding Path=Tag}">
                            <StackPanel Width="Auto">
                                <Image Height="16" Source="images/movies_24x24.png" />
                                <TextBlock Text="{Binding Path=Content}" Width="Auto" />     
                            </StackPanel>               
                        </ListBoxItem>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </Window.Resources>
     
    <Grid>
    <ListBox Name="ListBox1" ItemTemplate="{StaticResource listBoxItem}" Width="214" HorizontalAlignment="Left" Margin="14,116,0,44" BorderThickness="1,1,1,1" />
        </Grid>
    J'ajoute les item (Binding):

    VB

    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
     
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
            'cree les objets
            Dim obj As New cls_film_search
            Dim mov As cls_movie_tags
            Dim i As Integer = 0
            'pour chaque resultat
            Dim itemlist As New List(New ListItem)
     
            Dim lst As New List(Of items)
            For Each mov In obj.get_propositions(Me.TextBox1.Text)          
                i = i + 1
     
                lst.Add(New items(mov.title.Replace("&nbsp;", " "), mov.num))
                'Me.BackgroundWorker1.ReportProgress(i, elt)
            Next
     
            Me.ListBox1.ItemsSource = lst
     
        End Sub
    Je veux récupérer le Tag de l'item sélectionner:

    VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub ListBox1_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles ListBox1.MouseDoubleClick
     
            Dim lst As New ListBoxItem
     
            lst = Me.ListBox1.ItemContainerGenerator.ContainerFromIndex(Me.ListBox1.SelectedIndex)
     
            MsgBox(lst.Tag.ToString()) 
     
        End Sub
    Ici list.Tag.ToString() est null Pourquoi?

    Merci, Olivier.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     Dim lst As New ListBoxItem
            lst = Me.ListBox1.ItemContainerGenerator.ContainerFromIndex(Me.ListBox1.SelectedIndex)
     
            MsgBox(lst.Content.ToString())
    Dans lst je récupère bien tout le contenu de l'item, mais ensuite si je veux faire un lst.Tag ou un lst.Content pour récupérer les valeurs, soit je recois rien (pour item.Tag) ou je recois WpfApplication1.Window1+items (pour item.Content) ?

    Merci

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Dans ce cas, si tu ne recupères rien dans Tag, c'est que ton binding ne semble pas marcher....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut
    Le Binding fonctionne, les éléments s'ajoutent a la ListBox et si je fais un Breakpoint sur la MsgBox(), je vois bien que dans lst Content a bien la valeur que j'ai mise en Content et en Tag....

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Dans ton code, tu fais ceci :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    lst.Add(New items(mov.title.Replace("&nbsp;", " "), mov.num))
    le items en question est un objet à toi ? avec une propriété Tag et Content de défini ?
    En gros ce que tu fais c'est bien quelque chose comme ça :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    lst.Add(New items(Content, Tag))

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut
    Oui c'est exactement ce que je fais.

    Je récupère le Content (mov.Title) et le Tag (Mov.num) d'une class externe.
    Que je met ensuite dans la la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Dim lst As New List(Of items)

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Et si tu cast ton ListBoxItem comme ça :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox( ((items)lst).Content.ToString() )

    [Edit] ce cast marche en c#, est-ce qu'en vb on fait de la même façon, je ne sais pas

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut
    J'ai esseiller sa revien au meme...

    J'ai mis le Projet complet en fichier attaché si sa peut aider... je suis a court d'idée, je vois pas ou est mon erreur
    Fichiers attachés Fichiers attachés

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 45
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    C'est bon j'ai enfin trouvé mon erreur!
    Voici le code à modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Private Sub ListBox1_MouseDoubleClick1(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles ListBox1.MouseDoubleClick
            Dim lst As New List(Of items)
     
            lst.Add(Me.ListBox1.SelectedItem)
     
            MsgBox(lst.Item(0).Tag.ToString())
        End Sub
    @++

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

Discussions similaires

  1. Récupérer valeur dans un DataTemplate
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 30/06/2008, 13h23
  2. tag param -> récupérer le param dans l'action
    Par laurent.c123 dans le forum JSF
    Réponses: 6
    Dernier message: 06/11/2007, 13h41
  3. [c#] Récupérer dernier item coché dans CheckBoxList
    Par Filippo dans le forum ASP.NET
    Réponses: 4
    Dernier message: 16/02/2007, 15h42
  4. Réponses: 8
    Dernier message: 26/08/2006, 11h13
  5. Réponses: 6
    Dernier message: 30/04/2004, 15h53

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