No estoy al tanto de ninguna manera (no kludgy) para hacer esto: el DataTemplateSelector se llama cuando WPF tiene que seleccionar la plantilla, y eso es una decisión de una sola vez en lo que WPF es preocupado. (Puede evitarlo haciendo que WPF piense que el contenido ha cambiado, por ejemplo, configurando el contenido como nulo y luego de regreso, creo que eso funcionaría, pero no lo ha probado, ¡pero esto es bastante feo!). una buena manera de hacer esto yo también estaría interesado en saberlo!
Sin embargo, hay una manera alternativa de cambiar cómo se muestra el contenido que hace la actualización en respuesta a los cambios de datos, y eso es a través de activadores. Puede usar DataTriggers en su colección DataTemplate.Triggers
para mostrar y ocultar elementos en función de los datos de contenido. Para cambiar toda la pantalla, podría, por ejemplo, configure dos representaciones en una cuadrícula, y use disparadores para controlar cuál es visible. Incluso podría hacer que su plantilla de datos sea ContentControl y usar un activador para cambiar ContentTemplate. Por supuesto, esto depende de los criterios para cambiar la plantilla de propiedades enlazables, lo que puede no ser siempre el caso.
Here's some brief discussion of selectors vs. triggers, aunque en un contexto ligeramente diferente.
Tengo problemas al usarlo con DataTrigger, eche un vistazo: http://stackoverflow.com/questions/2090148/unable-to-set-contenttemplate-via-datatrigger – Shimmy