Nº FrameworkElement.DatatContext
es la propiedad de dependencia que habilita el enlace de datos del tipo object
.
Como han señalado otros, puede especificar el tipo esperado de DataContext
para una plantilla especial llamada DataTemplate
. Muchos controles como ItemsControl
, ControlControl
proporcionan acceso a DataTemplates para permitirle establecer las expectativas de la representación visual del tipo de DataContext.
Bryan tiene razón, no ha probado su código.
La correcta aplicación de un DataTemplate escrito tiene el siguiente aspecto:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" />
</Window>
ContentPresenter hereda directamente de FrameworkElement y no tiene una propiedad de plantilla. Además, la propiedad de Plantilla comúnmente se refiere a Control.Template de tipo ControlTemplate, que es algo completamente diferente a una DataTemplate.
Creo que Bryan estaba pensando en el ContentControl
que es uno de los dos tipos de control de raíz (el otro es ItemsControl
). ContentControl
hereda de Control. Por lo tanto, podemos especificar la propiedad de la Plantilla si así lo elegimos.
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
<ControlTemplate x:Key="ControlSkin" TargetType="{x:Type ContentControl}">
...
</ControlTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" Template="{StaticResource ControlSkin}" />
</Window>
.Net 3.5 no tiene un DataTemplate.Propiedad TargetType –
@Brian Tienes razón, es DataType. Dije que no había sido probado. Actualicé la respuesta para arreglar el error. –