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 :

Binding exterieur à un DataTemplate avec ElementName


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut Binding exterieur à un DataTemplate avec ElementName
    Bonjour à tous, j'ai un petit problème avec un binding extérieur à un datatemplate.

    En simplifiant ma vue voilà comment elle est composée :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Window>
    	<DataTemplate>
    		<UserControl x:Name="main">
    			<Control x:Name="destination"/>
    			<DataTemplate>
    				<UserControl>
    					<Button Command="{Binding Command, ElementName=destination}" />
    				</UserControl>
    			</DataTemplate>
    		</UserControl>
    	</DataTemplate>
    </Window>

    Donc mon but est de binder le bouton à une commande de mon control "destination".
    Le binding ne trouve pas destination.

    Par contre si je veux atteindre main avec un binding du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {Binding RelativeSource={RelativeSource AncestorType=UserControl,AncestorLevel=2,Mode=FindAncestor}}
    Je n'ai aucun soucis..

    Une idée ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut
    Bon j'utilise une solution temporaire en utilisant le path pour revenir sur mon control mais c'est vraiment une mauvaise solution...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {Binding Path=Content.Children[2].Children[0].Property, RelativeSource={RelativeSource AncestorType=UserControl,AncestorLevel=2,Mode=FindAncestor},Mode=OneWay}

  3. #3
    Invité
    Invité(e)
    Par défaut
    La commande utilisée dans ton contrôle destination est récupérée comment ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    La commande utilisée dans ton contrôle destination est récupérée comment ?
    Je ne suis pas sur de bien comprendre la question. Mais en faite c'est une commande qui gère un historique d'action graphique de ce control. Donc je bind simplement un bouton à un ICommand contenu dans le control.

    Mais de toute façon il en est de même pour les autres propriétés de ce control.

    En faite sans mon dernier datatemplate (qui est un control de transition et je pense que le problème vient de là) ça marchait sans soucis il trouvait sans problème le control "destination" avec ElementName.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sfxzeus Voir le message
    Je ne suis pas sur de bien comprendre la question. Mais en faite c'est une commande qui gère un historique d'action graphique de ce control. Donc je bind simplement un bouton à un ICommand contenu dans le control.
    ça répond à ma question. Sinon je ne comprends pas pourquoi tu as un DataTemplate imbriqué dans un DataTemplate. Surtout que celui imbriqué je ne vois pas trop à quoi ça sert.
    Pourquoi ne pas faire un truc simple comme suit qui devrait marcher mais je n'ai pas testé :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Window>
            <Window.Resources>
    	<DataTemplate x:Key="monDataTemplate">
    		<UserControl x:Name="main">
    			<Control x:Name="destination"/>
    			<UserControl>
    				<Button Command="{Binding Command, ElementName=destination}" />
    			</UserControl>
    		</UserControl>
    	</DataTemplate>
            </Window.Resources>
    </Window>

    À noter que c'est plus intéressant et logique de mettre les DataTemplate en ressources.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut
    C'est beaucoup plus complexe que ça en faite, j'ai volontairement simplifié la description de ma fenêtre.

    En faite dans cette partie j'ai une vue maître qui contient plusieurs vue enfants (qui peuvent interagir avec la vue maître).

    Donc non ce n'est pas possible de simplifier cette partie, mes datatemplate sont effectivement en ressources.

    Mais je crois que cela provient effectivement de mon ContentPresenter qui sert aux transitions entre les vue enfants (je me sers du code de cette librarie). Ce que je ne comprend pas c'est qu'une recherche d'ancêtre fonctionne mais pas une recherche d’élément,cela m'échappe un peu...

Discussions similaires

  1. Binding avec ElementName dans un DataTemplate
    Par annalady dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/06/2008, 14h00
  2. Association d'un DataTemplate (avec event) à plusieurs classes
    Par stephanie.gaillard dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 03/04/2008, 08h56
  3. comment le bind d'un gridview avec un arraylist
    Par charaf dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/02/2008, 17h17
  4. Binding data Interbase/Firebird avec NetBeans 6
    Par kimlee dans le forum NetBeans
    Réponses: 4
    Dernier message: 31/01/2008, 10h52
  5. Binding d'un datanhandler avec JAXWS/JAXB
    Par annerezo dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 05/11/2007, 10h47

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