Nein. FrameworkElement.DatatContext
ist die Abhängigkeitseigenschaft, die die Datenbindung ermöglicht, vom Typ object
.
Wie bereits von anderen erwähnt, können Sie den erwarteten Typ einer DataContext
für eine spezielle Vorlage namens DataTemplate
. Viele Kontrollen wie z. B. ItemsControl
, ControlControl
ermöglichen den Zugriff auf DataTemplates, damit Sie die Erwartungen der visuellen Darstellung an den Typ des DataContextes festlegen können.
Bryan hat recht, er hat seinen Code nicht getestet.
Die korrekte Anwendung eines typisierten DataTemplates sieht wie folgt aus:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" />
</Window>
ContentPresenter erbt direkt von FrameworkElement und verfügt nicht über eine Template-Eigenschaft. Darüber hinaus bezieht sich die Eigenschaft Template in der Regel auf Control.Template vom Typ ControlTemplate, was etwas völlig anderes ist als ein DataTemplate.
Ich glaube, Bryan dachte an die ContentControl
die eine der beiden Arten von Root-Kontrollen ist (die andere ist ItemsControl
). ContentControl
erbt in der Tat von Control. Daher können wir die Eigenschaft Template angeben, wenn wir dies wünschen.
<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>