Tengo un control genérico que muestra un editor basado en la propiedad type dentro de un ViewModel. Actualmente se implementa utilizando Control
, ControlTemplate
y DataTrigger
como esto -ControlTemplate con DataTrigger vs. DataTemplate con DataTemplateSelector
<Control
x:Name="MainControl"
Grid.Column="1"
TargetUpdated="OnTargetUpdated">
<Control.Style>
<Style>
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=EditorType}"
Value="{x:Static view:EditorType.Bool}">
<Setter
Property="Control.Template"
Value="{StaticResource boolTemplate}" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=EditorType}"
Value="{x:Static view:EditorType.Text}">
<Setter
Property="Control.Template"
Value="{StaticResource textTemplate}" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=EditorType}"
Value="{x:Static view:EditorType.Integer}">
<Setter
Property="Control.Template"
Value="{StaticResource integerTemplate}" />
</DataTrigger>
...
....
</Style.Triggers>
</Style>
</Control.Style>
</Control>
Ahora, puede conseguir lo mismo usando ContentPresenter
, DataTemplate
y DataTemplateSelector
como esto -
<local:EditorTemplateSelector
BoolEditorTemplate="{StaticResource boolTemplate}"
TextEditorTemplate="{StaticResource textTemplate}"
IntegerEditorTemplate="{StaticResource integerTemplate}"
...
....
x:Key="EditorTemplateSelector">
</local:EditorTemplateSelector>
<ContentPresenter
ContentTemplateSelector="{Binding Source={StaticResource EditorTemplateSelector}}"
Content="{Binding}"
TargetUpdated="OnTargetUpdated">
</ContentPresenter>
// Template selector returning appropriate template based on type
me siento el segundo enfoque, utilizando DataTemplateSelector
es mejor, pero me gustaría saber de usted -
¿Cuál es mejor y por qué?
¿Habrá alguna diferencia de rendimiento en dos?
Según lo que he visto, la segunda forma se considera la mejor práctica. También es mucho más legible ya que no mantiene la lógica de selección (que siempre debe definirse en C#). Sin embargo, también estoy interesado en el punto de rendimiento. –