No. FrameworkElement.DatatContext
è la proprietà di dipendenza che consente l'associazione dati è di tipo object
.
Come indicato da altri, è possibile specificare il tipo previsto di DataContext
per un modello speciale denominato DataTemplate
. Molti controlli come ItemsControl
, ControlControl
forniscono l'accesso a DataTemplates per consentire all'utente di impostare le aspettative di rappresentazione visiva del tipo di DataContext.
Bryan ha ragione, non ha testato il suo codice.
La corretta applicazione di un DataTemplate digitato assomiglia a questo:
<Window>
<Window.Resources>
<DataTemplate x:Key="TypedTemplate" DataType="{x:Type myViewModel}">
...
</DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource TypedTemplate}" />
</Window>
ContentPresenter eredita direttamente da FrameworkElement e non dispone di una proprietà Template. Inoltre, la proprietà Template si riferisce comunemente a Control.Template del tipo ControlTemplate che è qualcosa di completamente diverso da un DataTemplate.
Penso che Bryan stesse pensando allo ContentControl
che è uno dei due tipi di controllo root (l'altro è ItemsControl
). ContentControl
infatti eredita da Control. Pertanto possiamo specificare la proprietà Template su di esso se lo desideriamo.
<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>
. Rete 3.5 non ha un DataTemplate.Proprietà TargetType –
@Brian Hai ragione, è DataType. Ho detto che non era stato testato. Ho aggiornato la risposta per correggere l'errore. –