Ich kenne keine (nicht kludgy) Möglichkeit, dies zu tun: Der DataTemplateSelector wird aufgerufen, wenn WPF das Template auswählen muss, und das ist eine einmalige Entscheidung, soweit WPF betroffen ist. (Sie können es durch einen Kludge machen, indem Sie WPF glauben lassen, dass sich der Inhalt geändert hat, z. B. indem Sie den Inhalt auf null setzen und dann wieder zurück -- ich denke, das würde funktionieren, aber ich habe es nicht getestet -- aber das ist ziemlich hässlich!) Wenn es einen guten Weg gibt, dies zu tun, würde ich auch gerne wissen!
Es gibt jedoch eine alternative Möglichkeit, wie der Inhalt angezeigt wird, die auf Datenänderungen reagiert, und das sind Trigger. Sie können DataTriggers in Ihrer DataTemplate.Triggers
-Sammlung verwenden, um Elemente abhängig von den Inhaltsdaten anzuzeigen und auszublenden. Um die gesamte Anzeige zu ändern, könnten Sie z. B. zwei Darstellungen in einem Raster einrichten und Trigger verwenden, um festzulegen, welche sichtbar ist. Sie könnten sogar Ihr Daten-Template zu einem ContentControl machen und einen Trigger verwenden, um das ContentTemplate zu ändern. Natürlich hängt dies davon ab, dass die Kriterien für die Änderung des Templates bindbare Eigenschaften sind, was nicht immer der Fall sein kann.
Hier finden Sie eine kurze Diskussion über Selektoren vs. Trigger, wenn auch in einem etwas anderen Kontext.