none
[ WP 7.5 ] Binding avec deux éléments RRS feed

  • Question

  • Bonjour à tous,

    Dans une application WP7.5, j'aurai besoin de faire un binding avec un objet une list<T>

    J'ai voulu faire ceci :

    Dans mon code.xaml.cs

    public CTiers TiersSelected = new CTiers();

    public List<CTiers> LstContacts = new List<CTiers>();

    this.DataContext = new { One = TiersSelected, Two = LstContacts };
                

    Dans mon code.xaml :

    <TextBlock Text="{Binding One.m_strTypeTiers}" Style="{StaticResource PhoneTextNormalStyle}" />

    Le binding ne fonctionne pas, mes textBoxs sont vide.

    Information importante, si j'affecte le dataContext à

    this.DataContext = TiersSelected;

    tout est ok dans ce cas là. C'est donc le fait d'utiliser la syntaxe :

    this.DataContext = new { One = TiersSelected, Two = LstContacts };

    qui semble mal passer.

    Quelqu'un pourrait-il me dépanner à ce sujet ?

    Merci beaucoup,

    Nixeus


    • Modifié Nixeus mardi 15 janvier 2013 21:51
    mardi 15 janvier 2013 21:42

Réponses

  • Je crois que tu as mal compris ce que je t'ai dit, tu dois utiliser un type non anonyme pour ton datacontext car là c'est des champs que tu utilises et non des propriétés

    InfosTiers InfosTiers = new InfosTiers();
    InfosTiers.One  = TiersSelected;
    InfosTiers.Two  = LstContacts;
    this.DataContext = InfosTiers;


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse Nixeus lundi 21 janvier 2013 13:30
    jeudi 17 janvier 2013 19:01
    Modérateur

Toutes les réponses

  • Euh? A quel moment tu utilises ladite liste ?

    this.DataContext = new { One = TiersSelected, Two = LstContacts };
    Traduit l'utilisation d'un type Anonyme et il me semble que le binding n'est pas disponible sur les types anonymes
    mardi 15 janvier 2013 22:07
  • A la base, je n'avais besoin de faire que le binding sur mon objet TiersSelected ( c'est un objet qui représente un client ( nom, prénom,etc..)), et là, tout fonctionnait.

    Seulement voila, je souhaiterai afficher, sur le second élément du panoramaItem de ma page, la liste des contacts de ce tiers ( sous la forme d'une liste de tiers).

    Dans mon XAML je vais devoir binder des textbox vers des propriétés de mon objet tiers, mais binder également des éléments vers la liste de tiers ( la liste des contacts).

    Peux être que je fais fausse route, et que je devrais m'y prendre autrement ? Comment ferais-tu ?

    (-> Comme tu dit, apparemment, le binding n'est pas disponible sur les types anonymes :\ )

    Comment procéder proprement ?

    Merci :)

    mardi 15 janvier 2013 22:12
  • Tout simplement car un type anonyme contient des champs et non des propriétés et de l'autre côté un binding ne fonctionne qu'avec des propriétés.

    Il est donc indispensable que tu créé une classe

    class MonType{

    public object One{get;set;}

    public object Two{get;set;}

    }

    et tu utiliseras une instance de cette classe ensuite 


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse Nixeus mardi 15 janvier 2013 22:16
    • Non marqué comme réponse Nixeus jeudi 17 janvier 2013 10:19
    mardi 15 janvier 2013 22:13
    Modérateur
  • Ca fait donc de l'encapsulation en plus, mais si je comprends bien, il n'y a pas moyen de faire "plus" propre, c'est ça ?
    mardi 15 janvier 2013 22:15
  • Tu peux au pire utiliser une KeyValuePair<T,Y>, mais bon... 

    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mardi 15 janvier 2013 22:29
    Modérateur
  • Dans mon fichier CS j'ai donc fait ceci :

    class InfosTiers
    {
        public object One { get; set; }
        public object Two { get; set; }
    }
    Puis dans le OnNaviagtedTo

    InfosTiers InfosTiers = new InfosTiers();
    InfosTiers.One  = TiersSelected;
    InfosTiers.Two  = LstContacts;
    this.DataContext = new { One = InfosTiers.One, Two = InfosTiers.Two };

    Enfin, côté XAML :

    <TextBlock Text="{Binding One.m_strTypeTiers}" Style="{StaticResource PhoneTextNormalStyle}" />
    <TextBlock Text="{Binding One.m_strCode}" Margin="0,0,10,0" Style="{StaticResource PhoneTextNormalStyle}" />

    Cela n'affiche toujours rien :(


    mercredi 16 janvier 2013 21:06
  • Help Please :)
    jeudi 17 janvier 2013 16:52
  • Tu as l'air de te binder sur un field plutot qu'une propriete (je dis ca parce que ta variable s'appelle m_strTypeTiers).


    Le binding ne fonctionne que sur des proprietes. Il faut donc transformer ton champs en propriete.


    Client Application Development MVP

    jeudi 17 janvier 2013 18:56
  • Je crois que tu as mal compris ce que je t'ai dit, tu dois utiliser un type non anonyme pour ton datacontext car là c'est des champs que tu utilises et non des propriétés

    InfosTiers InfosTiers = new InfosTiers();
    InfosTiers.One  = TiersSelected;
    InfosTiers.Two  = LstContacts;
    this.DataContext = InfosTiers;


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    • Marqué comme réponse Nixeus lundi 21 janvier 2013 13:30
    jeudi 17 janvier 2013 19:01
    Modérateur
  • Merci pour vos réponse.

    J'ai donc corrigé mon code :

                InfosTiers InfosTiers = new InfosTiers();
                InfosTiers.One  = TiersSelected;
                InfosTiers.Two  = LstContacts;
                this.DataContext = InfosTiers;

    Néanmoins, en faisant côté XAML :

    {Binding One.m_strTypeTiers}

    Toujours rien !

    Je présie que m_strTypeTiers est une propriété de mon objet TiersSelected. D'ailleurs en faisant un binding "simple", c'est à dire uniquement sur un seu objet, cela fonctionne.

    jeudi 17 janvier 2013 19:25
  • C'est quoi le type de TiersSelected?

    On peut voir sa definition ?


    Client Application Development MVP

    jeudi 17 janvier 2013 19:35
  • C'est un objet "Tiers", en voici sa définition ( sans les méthodes et le constructeurs afin d'alléger)

    public class CTiers { public enum TypeTiers { Client, Fournisseur, Contact, Collaborateur, Commercial, Prospect}; TypeTiers m_TypeTiers { set; get; } public string m_strTypeTiers { get; set; } public string m_strCode { set; get; } public string m_strNom { set; get; } public string m_strPrenom { set; get; } public string m_strTel { set; get; } public string m_strGsm { set; get; } public string m_strFax { set; get; } public string m_strMail { set; get; } public string m_strWebSite { set; get; } public string m_strVille { set; get; } public string m_strCpostal { set; get; } public string m_strRue { set; get; }

    }



    • Modifié Nixeus jeudi 17 janvier 2013 19:38
    jeudi 17 janvier 2013 19:38