2010-12-16 10 views
9

Estoy trabajando en WPF 4/C#. Tengo dos clases personalizadas:WPF - enlace a una propiedad de un objeto personalizado que está dentro de otro objeto

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

Desde dentro de XAML, deseo vincular las propiedades de estas clases. Aquí es lo que tengo:

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

(Aquí el <my:c2 ../> instancia la clase C2.) El primer TextBlock obras vinculante. El segundo no. ¿Por qué no puedo vincularme a una propiedad en el obj1? Solo parezco capaz de vincularme a las propiedades de la clase inmediata. Deseo vincularme a otras cosas, como un elemento de una matriz que pertenece a la clase inmediata o una propiedad de una clase secundaria, como se muestra arriba. ¿Qué me estoy perdiendo? Si envuelvo el obj1.prop1 en otra propiedad de la clase inmediata usando get/set, funciona. Pero no quiero tener que hacer eso, particularmente si empiezo a usar matrices, ¡no quiero envolver cada elemento en una propiedad separada!

Respuesta

14

Su obj1 es un campo, no una propiedad, por lo tanto no puede acceder al objeto C1.

consideran este lugar:

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

Y

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

PS. La próxima vez es mejor usar un ejemplo con las convenciones de nomenclatura estándar (por ejemplo, campos/variables en minúsculas, propiedades en mayúsculas, etc.) para permitir que las personas vean el problema más rápido.

10

No se puede enlazar a los campos, tienen que ser propiedades.

+0

¡Eres mejor! – poindexter12

+0

ESTOY intentando vincularme a una propiedad, simplemente sucede que está en un objeto secundario. ¿Se está produciendo el problema porque el objeto secundario es un campo y no hay forma de "pasarlo" para llegar a la propiedad? – mawrya

+0

@mawrya el objeto hijo en sí también necesita ser una propiedad, es decir, 'prop1' es una propiedad en' obj1', pero 'obj1' no es una propiedad de su clase' c2'. –

Cuestiones relacionadas