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 :

Passage de paramètre à un DataTemplate


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 49
    Par défaut Passage de paramètre à un DataTemplate
    Bonjour,

    Bravo pour votre forum. J'ai un souci que je vais essayer d'expliquer clairement.

    Ce que je veux faire :

    J'ai la listView suivante
    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
           <ListView Name="Test" >
                <ListView.View >
                    <GridView  >
                        <GridView.Columns >
                            <GridViewColumn Header=""
    			                       x:Name="toto" 
                                                   CellTemplate="{StaticResource NameTemplate}"
    			                        Width="100" >
                            </GridViewColumn>
                            <GridViewColumn  Header="" 				
                                                     CellTemplate="{StaticResource NameTemplate}"						
    />
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
     
            </ListView>
    La ListView est remplit d'objet avec Column0, Column1 et Column2 comme attribut qui sont en l'occurrence des TextBlock.

    dans mon Window.Resource j'ai donc un DataTemplate qui existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <DataTemplate x:Key="NameTemplate">
                <TextBlock Text="{Binding Path=Column0.Text}" 
                           Foreground="{Binding Path=Column0.Foreground}">
                </TextBlock>
            </DataTemplate>
    Le problème est que je voudrais pourvoir passer le nom de l'attribut de l'objet sur lequel se trouve le binding de façon à pouvoir créer une DataTemplate générique auquel on passerais juste le paramètre "Nom de l'attribut".

    Pour être plus clair, l'idéal serait de faire "comprendre" au DataTemplate de s'appliquer sur le nom du TextBlock donc à partir de Cell Template pouvoir appeller le DataTemplate avec le nom de l'attribut en paramètre.

    J'espère avoir été clair. Si quelqu'un aurait une solution ce serais le bonheur.
    Tout avis serait la bienvenue et encore merci pour votre forum qui me permets de répondre à mes très nombreuses interrogations.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Je dois avouer que même avec ton explication, ce n'est pas clair.... Tu pourrais essayer de réexpliquer ?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 49
    Par défaut
    désolé je pensais être compréhensif. Je suis pas doué pour les explications.

    Je vais reprendre:
    L'idée de base est de pouvoir appliquer un style à une cellule particulière notamment en fonction du contenu d'une variable.
    Donc j'ai une ListView qui contient des objets de type Toto

    Toto à 3 attributs
    String Column0
    String Column1
    String Column2

    Chacun étant le contenu à afficher dans la colonne.

    Si on effectue un DisplayMemberBinding sur le GridViewColumn, on a bien le texte mais sans mise en forme possible.
    L'idée était donc de passer les attributs à TextBlock donc Toto devient

    TextBlock Column0
    TextBlock Column1
    TextBlock Column2

    Ce qui fait que dans le code Behind je peux lui mettre la mise en forme que je veux.
    Le DisplayMemberBinding est alors remplacé par un CellTemplate pour afficher les proprièté du TextBlock que je veux.

    Cela marche nickel.

    Le souci est que j'aurais aimé généralisé ce comportement. Or dans le DataTemplate j'ai des attributs du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Foreground="{Binding Path=Column0.Foreground}
    où Column0 représente un attribut de ma classe bindé avec ma ListView.
    Je suis donc obligé d'avoir un DataTemplate par colonne.

    Il faudrait pouvoir passer un paramètre au DataTemplate pour lui indiquer sur quel colonne faire le binding. En clair dans l'exemple passé "Column0" en paramètre pour récupérer le Foreground.

    Je sais que c'est assez tordu et je ne suis pas sur que c'est possible mais j'ai certaine contrainte qui m'empêche de faire comme je le veux.

    Merci pour ton aide en tout cas (et félicitations pour tes tutos qui sont vraiment un modèle de clarté et de pédagogie)

Discussions similaires

  1. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58
  2. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  3. [XSL] Passage de paramètres à un template
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2003, 13h28
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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