2010-12-16 110 views
9

我正在WPF 4/C#中工作。我有兩個自定義類:WPF - 綁定到另一個對象內的自定義對象的屬性

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"; 
    } 
} 

從XAML內部,我想綁定到這些類的屬性。以下是我有:

<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> 

(這裏<my:c2 ../>實例化C2級。)第一個TextBlock的結合的作品。第二個不是。爲什麼我不能綁定到obj1上的屬性?我似乎只能綁定到直系班的屬性。我想能夠綁定到其他東西,如屬於直接類或子類的屬性的數組中的元素,如上所示。我錯過了什麼?如果我使用get/set將obj1.prop1包裝在直接類的另一個屬性中,它就可以工作。但我不想這樣做,特別是如果我開始使用數組,我不想將每個元素包裝到一個單獨的屬性!

回答

14

您的obj1是一個字段,而不是屬性,因此您無法訪問C1對象。

考慮這個:

public class c2 { 
    public string prop1 { get; set; } 
    private readonly c1 _obj1; 

    public c2() { 
     prop1 = "hello"; 
     _obj1 = new c1(); 
    } 

    public c1 PropObj1 { get { return _obj1; } } 
} 

而且

<TextBlock DataContext="{DynamicResource c2}" Text="{Binding PropObj1.prop1}"/> 

PS。下次更好地使用帶有標準命名約定的例子(例如小寫字段/變量,大寫屬性等),以便人們更快地看到問題!

10

您無法綁定到字段,它們必須是屬性。

+0

你打敗了它! – poindexter12 2010-12-16 00:09:30

+0

我試圖綁定到一個屬性,它恰好在一個子對象上。發生問題是因爲子對象是一個字段,並且沒有辦法「綁定」它來獲取該屬性? – mawrya 2010-12-16 00:45:13

+0

@mawrya子對象本身也需要是一個屬性,即'prop1'是'obj1'上的一個屬性,但是'obj1'本身不是''c2'類的屬性。 – 2010-12-16 02:04:57

相關問題