Я слышал, что DataTemplateSelectors
не обновляет шаблон, если значение основано на изменениях, и поэтому я обычно не использую их.
Мой предпочтительный метод на самом деле заключается виспользовать DataTemplates.
<MyControl.Resources>
<DataTemplate TargetType="{x:Type local:BooleanModel}">
<local:BooleanView />
</DataTemplate>
<DataTemplate TargetType="{x:Type local:IntegerModel}">
<local:IntegerView />
</DataTemplate>
...
</MyControl.Resources>
Во-вторых, если я хочу изменить шаблон на основе свойства, а не типа объекта, я склонен использовать DataTriggers
.Это потому, что если это свойство когда-либо будет изменено, уведомление PropertyChange автоматически сообщит пользовательскому интерфейсу, что оно изменилось, и обновит шаблон.Я не верю DataTemplateSelectors
сделать это автоматически.Я также предпочитаю видеть логику выбора шаблонов в моем XAML, не скрывать ее в файле TemplateSelector, но это просто личное предпочтение.
И мой последний выбор - использовать DataTemplateSelector
.Я почти никогда не использую его в приложении WPF, хотя я часто использую его в Silverlight, поскольку он не поддерживает мой предпочтительный метод использования неявного DataTemplates
(пока)
Я не знаю о каких-либо существенных различиях в производительности междудва, хотя мне было бы интересно, если кто-то может сказать мне иначе.