WPF - liaison à une propriété d'un objet personnalisé situé dans un autre objet
Je travaille dans WPF 4 /C#. J'ai deux classes personnalisées:
public class c1 {
public string prop1 { get; set; }
public c1() {
prop1 = "world";
}
}
public class c2 {
public string prop1 { get; set; }
public c1 obj1 = new c1();
public c2() {
prop1 = "hello";
}
}
De l'intérieur XAML, je veux lier à des propriétés de ces classes. Voici ce que j'ai:
<Window.Resources>
<my:c2 x:Key="c2"/>
</Window.Resources>
<StackPanel>
<TextBlock DataContext="{DynamicResource c2}" Text="{Binding prop1}"/>
<TextBlock DataContext="{DynamicResource c2}" Text="{Binding obj1.prop1}"/>
</StackPanel>
(Ici le <my:c2 ../>
instancie la classe c2.) La première TextBlock liaison fonctionne. La deuxième ne l'est pas. Pourquoi je ne peux pas lier à une propriété sur la obj1? Je ne semble pas être en mesure de lier les propriétés de la classe. Je veux être capable de se lier à d'autres trucs comme un élément dans un tableau qui appartient à l'immédiate classe ou une propriété d'un enfant de la classe, comme indiqué ci-dessus. Ce qui me manque? Si j'enveloppe le obj1.prop1 dans une autre propriété de la classe à l'aide de get/set, il fonctionne. Mais je ne veux pas avoir à le faire, surtout si je commence à l'aide de tableaux, je ne veux pas envelopper chaque élément dans une propriété indépendante!
source d'informationauteur mawrya
Vous devez vous connecter pour publier un commentaire.
Votre
obj1
est un champ, une propriété, vous ne pouvez donc pas accéder à la C1 objet.Considérer ceci à la place:
Et
PS. La prochaine fois, mieux vaut utiliser un exemple avec la norme conventions de nommage (par exemple, les minuscules champs/les variables, les majuscules propriétés etc) pour permettre aux gens de voir le problème plus tôt!
Vous ne pouvez pas lier les champs, ils doivent être les propriétés.