Мне неизвестен какой-либо (не хитрый) способ сделать это: DataTemplateSelector вызывается, когда WPF необходимо выбрать шаблон, и это единственное решение, если речь идет о WPF. (Вы можете запутаться в этом, заставив WPF думать, что контент изменился, например, установив для него значение null, а затем снова вернуться - я думаю, что это сработало бы, но не проверило его - но это довольно уродливо!) хороший способ сделать это, мне тоже было бы интересно узнать!
Однако существует альтернативный способ изменить способ отображения контента, который обновляет в ответ на изменения данных, и это с помощью триггеров. Вы можете использовать DataTriggers в вашей коллекции DataTemplate.Triggers
, чтобы показать и скрыть элементы в зависимости от данных содержимого. Чтобы изменить весь дисплей, вы можете, например, установить два рендеринга в сетке и использовать триггеры, чтобы контролировать, какой из них виден. Вы даже можете сделать свой шаблон данных ContentControl и использовать триггер для изменения ContentTemplate. Конечно, это зависит от критериев изменения шаблона, являющихся связываемыми свойствами, что не всегда может иметь место.
Вот краткое обсуждение селекторов и триггеров , хотя и в несколько ином контексте.