2010-12-16 113 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

相关问题