Ich arbeite in WPF 4/C#. Ich habe zwei benutzerdefinierte Klassen:WPF - Bindung an eine Eigenschaft eines benutzerdefinierten Objekts, das sich in einem anderen Objekt befindet
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";
}
}
Von XAML möchte ich an Eigenschaften dieser Klassen binden. Hier ist, was ich habe:
<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>
(hier die <my:c2 ../>
instanziiert die c2-Klasse.) Der erste Textblock Werke verbindlich. Die zweite nicht. Warum kann ich nicht an eine Eigenschaft im obj1 binden? Ich bin nur in der Lage, an Eigenschaften der unmittelbaren Klasse zu binden. Ich möchte in der Lage sein, an andere Sachen wie ein Element in einem Array zu binden, das der unmittelbaren Klasse oder einer Eigenschaft einer Kindklasse gehört, wie oben gezeigt. Was vermisse ich? Wenn ich das Objekt "obj1.prop1" mit get/set in eine andere Eigenschaft der unmittelbaren Klasse einpacke, funktioniert es. Aber ich möchte das nicht tun müssen, besonders wenn ich Arrays benutze, möchte ich nicht jedes Element in eine separate Eigenschaft verpacken!
Sie schlagen sich daran! – poindexter12
Ich versuche, an eine Eigenschaft zu binden, es ist zufällig auf einem Kindobjekt. Tritt das Problem auf, weil das untergeordnete Objekt ein Feld ist und es keine Möglichkeit gibt, es "zu binden", um an die Eigenschaft zu gelangen? – mawrya
@mawrya das Kindobjekt selbst muss auch eine Eigenschaft sein, d. H. 'Prop1' ist eine Eigenschaft auf' obj1', aber 'obj1' selbst ist keine Eigenschaft Ihrer' c2' Klasse. –