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 ElementName + Path


Sujet :

Windows Presentation Foundation

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut Binding ElementName + Path
    Bonjours,


    Voilà, je vous explique mon problème:
    j'ai un ElementFlow (FluidKit) qui me retourne mon Object dans une collection, pour y accéder je dois passer par sa propriété Items, puis CurrentItem puis là, j'ai besoin de ma propriété Path de mon Object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MediaElement Name="MyMediaElement" Source={Binding ElementName=myElementFlow, Path=Items.CurrentItem.Path} />
    Problème? ça marche pas...

    Lorsque je le fais en code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyMediaElement.Source = new Uri(((MyObject)elementFlow.Items.CurrentItem).Path);
    Ça marche...

    Problème de casting? comment faire?
    Pourriez vous m'aider?

  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
    Tu as une erreur ou c'est juste que ça marche pas ?

    Pourquoi d'un côté du as myElementFlow et de l'autre elementFlow ?
    Tu as essayé avec un Converter ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Oups, non c'est pareil en faite...
    les deux sont MyElementFlow, et ça fonctionne en code mais pas en Binding...

    j'essai avec un Converter, mais pareil, il passe même pas dedans...

    Y'a aucune erreur, ça ne fonctionne juste pas. (j'ai mi un MediaOpended et ça passe pas dedans avec le Binding alors qu'en code (lorsque je remplis le Source en code, là ça passe).

  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
    Et avec un converter si tu mets juste Items ? Juste CurrentItem ? Est-ce que tu rentres dedans ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    J'ai essayé, il a l'air d'y passer, mais il faut que je fasse un contrôle car il s'éxécute une première fois et value est à Null (dans le Converter)...

    Je pense que de cette manière ça marche (avec seulement Items).

    Il n'y a sans doute pas moyen de passer par autre chose qu'un converter?

    bizarre parce que avec un ListView, on a SelectedItem et ça marche sans problème (SelectedItem.Path)

    C'est dû au fait qu'il y a trop de niveau dans le Path= du Binding?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    je me demande si ce n'est pas à cause de l'exception qu'il se prend lors du binding initial (je ne pense pas que CurrentItem soit différend de null lors de l'initialisation du control)

    Par contre, je pense qu'une solution possible doit être ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <MediaElement Name="MyMediaElement" Source={Binding Path} DataContext={Binding ElementName=myElementFlow, Path=Items.CurrentItem} />

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    (je ne pense pas que CurrentItem soit différend de null lors de l'initialisation du control)
    Il est à null alors de l'initialisation.

    Exacte.

    Par contre, pour ton exemple, je vais tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MediaElement Name="MyMediaElement" Source={Binding Path} DataContext={Binding ElementName=myElementFlow, Path=Items.CurrentItem} />
    Là clairement, on crée affecte au DataContext l'object CurrentItem de la CollectionItem de l'élement MyElementFlow et on prend la propriété Path.

    Si Items de MyElementFlow est à null à l'initialisation, le fait de le définir en DataContext permet de ne pas lever d'exception.

    (j'espère avoir compris)

    Merci, je testerai ça rapidement.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    En fait, au niveau du process, je pense qu'il va se passer ce qui suit :
    - il fait le binding du DataContext et le met à null
    - il fait le binding du Source, DataContext vaut null, il lève une exception
    - tu sélèctionne un élément dans myElementFlow
    - la valeur de SelectedItem change et donc le DataContext de ton élément est mis à jour
    - suite à la mise à jour du DataContext, il met à jour tout ses élémpent qui utilise le DataContext (et donc devrait normalement mettre à jour Source)

    Si je fais erreur signalez le moi.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    ça fonctionne malheureusement pas

    pareil, aucune erreur...

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    J'ai testé même avec le Converter, y'a pas moyen.

    Même si j'arrive à le faire marcher la première fois, le fait d'avoir un CurrentItem à null pose un gros, le MediaElement Source demande une Uri et null doit mettre la ...

    Si vous avez des idées?

    Au pire, dans mon code source je récupère la valeur, y'a moyen de Binder directement mon Object venant du code?

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Désolé, je ne vois pas du tout pourquoi ça ne fonctionne pas...
    Je t'avoue que j'ai l'habitude de développer en utilisant la méthode MVVM avec WPF.
    Regarde si tu peux faire quelquechose avec SelectedIndex ou alors l'évènement correspondant avec ton élément.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Je sais pas si après y'a moyen de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MediaElement Source="{Binding ElementName=MyElementFlow, Path=Items[ElementName.SelectedIndex].Path}" />
    Je doute, mais bon, là, je continu des testes, je verrai bien...

    En tout cas merci pour ton aide, ça permet de voir différente approche que j'avais pas encore comprise en matière de Binding.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Binding d'un Object du code source vers XAML

    Voilà, c'est résolut, je passe un Object dans mon XAML

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

Discussions similaires

  1. Binding exterieur à un DataTemplate avec ElementName
    Par sfxzeus dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 29/01/2013, 10h01
  2. Problème de Binding et de Path
    Par nakk01 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 21/11/2011, 10h42
  3. Binding et Path
    Par cinemania dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 03/06/2010, 09h14
  4. Binding avec ElementName dans un DataTemplate
    Par annalady dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 23/06/2008, 14h00
  5. Redhat-9 changer le path des databases
    Par jean christophe dans le forum Installation
    Réponses: 7
    Dernier message: 30/05/2003, 17h53

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