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 :

Créer dynamiquement une propriété attachable


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut Créer dynamiquement une propriété attachable
    Bonjour.

    J'ai hésité entre poster ici ou dans C#, étant donné qu'il y'a une histoire de binding j'ai posté ici.

    En faite je voudrais créer dynamiquement une propriété qui pourrait être attachée.

    Situation :
    -J'ai un fichier xml avec:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Property>leTexte</Property>

    -J'ai un xaml que je charge où par exemple il y a :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBlock Text="{Binding leTexte}"/>

    -J'ai une textbox créée dynamiquement par rapport au xml qui une fois construite pourrait ressembler à ça :
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Text="{Binding leTexte}" Grid.Column="1"/>

    Je voudrais créer un viewmodel pour faire le lien entre le xaml chargé et ma textbox.

    Je me suis penché sur 'dynamic' et sur 'ExpandoObject' même si on peut créer une propriété de cette façon :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dynamic viewmodel = new ExpandoObjet();
    viewmodel.leTexte = etc....

    Je ne vois pas comment créer cette propriété via un string et comment rendre cette propriété bindabeule.

    Si quelqu'un a une idée (ou des questions parce que l'explication n'est pas clair).

    Merci.

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    Le binding vers un objet dynamique ne fonctionnera pas. Les mécanismes de binding de WPF sont rudimentaires et n'acceptent qu'une propriété comme cible. Si la reflection ne permet pas d'obtenir un PropertyInfo avec le nom spécifié dans le binding, ce dernier échoue. Si vraiment tu souhaites générer dynamiquement des viewmodels, il va falloir impérativement générer de nouvelles assemblies contenant les types désirés.

    Ma première question est donc : as-tu vraiment de binding ? Ne peux-tu simplement pas assigner les propriétés au moment où tu crées les contrôles et les rafraîchir manuellement par la suite ?

    A défaut, si tous tes contrôles sont identiques, ne peux-tu pas utiliser un type viewmodel commun ? Dans l'exemple donné il contiendrait par exemple deux propriétés "Text" et "Column".

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Merci pour ta réponse DonQuiche.

    Après l'avoir lu j'ai trouvé quelque chose de simple qui pourrait être utilisé dans ces cas là :
    Utiliser un dictionnary

    C'était tout bête et ça permet d'avoir une alternative malléable.
    Le principe c'est de se dire qu'au lieu d'avoir une propriété 'leText' et bien 'leText' représente une entrée dans le dictionnary.

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Au temps pour moi, j'ignorais que WPF s'était enrichi de cette possibilité. Bonne nouvelle cela dit.

  5. #5
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Si tu es en C# 4.0 tu peux trés bien utiliser le mot clef "dynamic' pour générer tes objets et se binder dessus.

    1. http://geekswithblogs.net/sdorman/ar...ogramming.aspx
    2. http://joshsmithonwpf.wordpress.com/...perty-changes/


    Bon courage,
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    merci jmix je mets ça au chaud.

    Le coup du dictionnary me plait bien, mais ça pourrait être intéressant de bien maitrisé 'dynamic'.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Le binding vers un objet dynamique ne fonctionnera pas.
    Si, depuis la v4 ça fonctionne (enfin ça pouvait difficilement fonctionner avant d'ailleurs, vu que dynamic n'existait pas...)

    Citation Envoyé par DonQuiche Voir le message
    Les mécanismes de binding de WPF sont rudimentaires et n'acceptent qu'une propriété comme cible. Si la reflection ne permet pas d'obtenir un PropertyInfo avec le nom spécifié dans le binding, ce dernier échoue. Si vraiment tu souhaites générer dynamiquement des viewmodels, il va falloir impérativement générer de nouvelles assemblies contenant les types désirés.
    Ca marche aussi avec les types qui implémentent ICustomTypeDescriptor, donc on peut bidouiller un peu sans pour autant générer des nouveaux types dynamiquement... (d'ailleurs je sais pas trop pourquoi ils mentionnaient ça dans les nouveautés de WPF 4.5, vu que je l'utilisais déjà dans les versions précédentes... Jonathan, tu as peut-être une idée sur la question ?)

  8. #8
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Ou il semble que j'ai quelques trains de retards, le binding semble être beaucoup plus souple depuis la v1. Quand au ICustomTypeDescriptor, j'avoue honteusement n'y avoir jamais songé.

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

Discussions similaires

  1. Créer dynamiquement une fonction dans une procedure
    Par cbon1 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/10/2006, 10h29
  2. créer dynamiquement une form
    Par paolo2002 dans le forum Delphi
    Réponses: 5
    Dernier message: 11/07/2006, 14h15
  3. est il possible de créer dynamiquement une class ???
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 12/07/2005, 16h22
  4. [MFC] Créer dynamiquement une classe
    Par vanitom dans le forum MFC
    Réponses: 9
    Dernier message: 11/12/2004, 13h23

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