I've heard that DataTemplateSelectors
do not update the template if the value they're based on changes, and because of this I usually don't use them.
My preferred method is actually to use DataTemplates.
<MyControl.Resources>
<DataTemplate TargetType="{x:Type local:BooleanModel}">
<local:BooleanView />
</DataTemplate>
<DataTemplate TargetType="{x:Type local:IntegerModel}">
<local:IntegerView />
</DataTemplate>
...
</MyControl.Resources>
Second, if I want to change the template based on a property rather than the object type, I tend to use DataTriggers
. This is because if that property ever gets changed, the PropertyChange notification will automatically tell the UI that it has changed and to update the template. I do not believe DataTemplateSelectors
do this automatically. I also prefer to see the template selection logic in my XAML, not have it hidden in a TemplateSelector file, but that's just personal preference.
And my last choice is to use a DataTemplateSelector
. I almost never use one in a WPF application, although I often do in Silverlight since it doesn't support my preferred method of using implicit DataTemplates
(yet)
I am not aware of any significant performance differences between the two, although I would be interested if someone can tell me otherwise.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…