wpf - Cómo enlazar a los datos dentro de una plantilla de datos de un ContentControl
data-binding datatemplate (1)
Debes unir el Content
propiedad del ContentControl
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource PersonTemplate}" />
Esto establecerá el DataContext de ContentControl como contenido del control.
Establecer solo la propiedad ContentTemplate
no es suficiente. ContentControl no utiliza implícitamente su DataContext como contenido.
Tengo el siguiente ejemplo simplificado:
<Window x:Class="TemplateBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="pack://application:,,,/TemplateBinding;component/PersonTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl ContentTemplate="{StaticResource PersonTemplate}" />
</Grid>
</Window>
Con:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<DataTemplate x:Key="PersonTemplate">
<Border Width="100" Height="100" Background="RosyBrown">
<TextBlock Text="{Binding Path=FirstName}" VerticalAlignment="Center" TextAlignment="Center"/>
</Border>
</DataTemplate>
</ResourceDictionary>
como mi DataTemplate en un archivo separado ResourceDictionary.
Configuré mi DataContext en el Construcor de mi MainWindow y lo he verificado simplemente mostrando el primer nombre como este: <ContentControl Grid.Row="1" Content="{Binding FirstName}"/>
.
En otro escenario donde utilizo un DataTemplate con un ListBox
, hago el enlace exactamente de la misma manera en mi DataTemplate y simplemente funciona.
Sé que DataTemplate funciona, excepto el enlace porque muestra correctamente el tamaño y el color de fondo.
¿Qué estoy haciendo mal? ¿Cómo debería verse el enlace en mi DataTemplate?