(Questa sembra una risposta abbastanza obsoleta.)
Ci sono usi validi di ContentPresenter
ovunque. Il mio uso principale è quello di inviare la vista dal tipo di runtime del contenuto.
Lasciatemi spiegare: immagina di avere una proprietà di tipo Animal
nella tua VM, quindi vorresti visualizzarla da qualche parte nell'interfaccia utente. Se hai un'interfaccia utente singola per qualsiasi tipo di Animal
, puoi inserirla in UserControl
e utilizzare un costrutto come
<AnimalControl DataContext="{Binding Animal}"/>
Tuttavia, immagina di avere un sacco di diversi animali, ad esempio Toad
s, Human
s e Unicorn
s. Quindi ti piacerebbe distinguere tra loro (forse hai sviluppato diversi UserControl
s per loro). Lo fai nel modo seguente:
<ContentPresenter Content="{Binding Animal}"/>
Per utilizzare la vista corretta, devi inserire il seguente DataTemplate
s nell'ambito:
<DataTemplate TargetType="{x:Type vm:Unicorn}">
<UnicornControl/>
</DataTemplate>
ecc. Di solito le persone ottengono tale funzionalità usando TemplateSelector
/ ContentTemplateSelector
, ma anche questo modo è valido e sembra essere più semplice (puoi mescolare gli ambiti dei modelli con stili personalizzati, a la CSS).