(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).