Io non sono a conoscenza di alcun modo (non kludgy) per fare questo: il DataTemplateSelector viene chiamato quando WPF ha bisogno di selezionare il modello, e questa è una decisione una tantum per quanto WPF è ha riguardato. (Puoi blandirlo facendo in modo che WPF ritenga che il contenuto sia cambiato, ad esempio impostando il contenuto su null e poi di nuovo indietro - penso che funzionerebbe ma non l'ho testato - ma questo è piuttosto brutto!) Se c'è un bel modo per farlo anch'io sarei interessato a saperlo!
Tuttavia, esiste un modo alternativo per modificare la modalità di visualizzazione del contenuto che lo esegue l'aggiornamento in risposta alle modifiche dei dati, e cioè tramite i trigger. È possibile utilizzare DataTriggers nella raccolta DataTemplate.Triggers
per mostrare e nascondere elementi in base ai dati del contenuto. Per cambiare l'intero display, potresti ad es. imposta due rendering in una griglia e utilizza i trigger per controllare quale è visibile. Si può persino creare un modello di dati come ContentControl e utilizzare un trigger per modificare ContentTemplate. Ovviamente ciò dipende dai criteri per la modifica del modello delle proprietà associabili, il che potrebbe non essere sempre il caso.
Here's some brief discussion of selectors vs. triggers, anche se in un contesto leggermente diverso.
Sto avendo problemi di utilizzarlo con DataTrigger, si prega di dare un'occhiata: http://stackoverflow.com/questions/2090148/unable-to-set-contenttemplate-via-datatrigger – Shimmy