Meilleur auteur de réponses
[ WP 7.5 ] Binding avec deux éléments

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
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
Toutes les réponses
-
-
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 :)
-
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
-
-
-
Dans mon fichier CS j'ai donc fait ceci :
class InfosTiers { public object One { get; set; } public object Two { get; set; } }
Puis dans le OnNaviagtedToInfosTiers 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 :(
-
-
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
-
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
-
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.
-
-
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
-
Bonjour,
Merci pour tenir la communauté informée sur la suite de vos démarches.
Cordialement,