Нет. FrameworkElement.DatatContext
- это свойство зависимости, которое разрешает привязку данных, имеет тип object
.
Как отмечают другие, вы можете указать ожидаемый тип DataContext
для специального шаблона, называемого DataTemplate
. Многие элементы управления, такие как ItemsControl
, ControlControl
, предоставляют доступ к шаблонам данных, позволяя вам установить ожидания визуального представления типа DataContext.
Брайан прав, он не проверял свой код.
Правильное применение типизированного DataTemplate выглядит следующим образом:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" />
</Window>
ContentPresenter наследуется непосредственно от FrameworkElement и не имеет свойства Template. Кроме того, свойство Template обычно ссылается на Control.Template типа ControlTemplate, который полностью отличается от DataTemplate.
Я думаю, что Брайан думал о ContentControl
, который является одним из двух типов корневого контроля (другой - ItemsControl
). ContentControl
фактически наследуется от Control. Поэтому мы можем указать для него свойство Template, если захотим.
<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>