Artículos Artículo de control Enlace de plantilla
En WPF4.0, tengo una clase que contiene otros tipos de clase como propiedades (combinando múltiples tipos de datos para mostrar). Algo como:
public partial class Owner
{
public string OwnerName { get; set; }
public int OwnerId { get; set; }
}
partial class ForDisplay
{
public Owner OwnerData { get; set; }
public int Credit { get; set; }
}
En mi ventana, tengo un ItemsControl con lo siguiente (recortado para mayor claridad):
<ItemsControl ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:MyDisplayControl
OwnerName={Binding OwnerData.OwnerName}
Credit={Binding Credit} />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Luego obtengo una colección de información de visualización de la capa de datos y configuro elDataContext
delItemsControl
a esta colección La propiedad "Crédito" se muestra correctamente, pero la propiedad OwnerName no. En cambio, me sale un error vinculante:
Error 40: error de ruta de BindingExpression: propiedad 'OwnerName' no encontrada en 'object' '' ForDisplay '(HashCode = 449124874)'. BindingExpression: Path = OwnerName; DataItem = 'ForDisplay' (HashCode = 449124874); el elemento de destino es 'TextBlock' (Nombre = txtOwnerName '); la propiedad de destino es 'Texto' (tipo 'Cadena')
No entiendo por qué esto intenta buscar la propiedad OwnerName en la clase ForDisplay, en lugar de en la clase Owner de la propiedad ForDisplay OwnerData.
Editar Parece que tiene algo que ver con el uso del control personalizado. Si ato las mismas propiedades a unTextBlock
Funcionan correctamente.
<ItemsControl ItemsSource={Binding}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<local:MyDisplayControl
OwnerName={Binding OwnerData.OwnerName}
Credit={Binding Credit} />
<TextBlock Text="{Binding OwnerData.OwnerName}" />
<TextBlock Text="{Binding Credit}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>