Bir ViewModel içindeki type özelliğine dayalı bir editör görüntüleyen genel bir kontrolüm var. DataTemplateSelector
olduğu kullanarak, DataTrigger Vs. ile ControlTemplate. DataTemplateSelector ile DataTemplate
<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
Ben ikinci yaklaşım hissediyorum - Aynı böyle
ContentPresenter
,
DataTemplate
ve
DataTemplateSelector
kullanılarak elde edilebilir, Şimdi
<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>
- Şu anda böyle Control
, ControlTemplate
ve DataTrigger
kullanılarak uygulanır oluyor daha iyi ama sizden bilmek istersiniz -
Hangisi daha iyi ve neden?
İkide herhangi bir performans farkı olacak mı?
Topladığımdan, ikinci yol en iyi uygulama olarak kabul edilir. Ayrıca seçim mantığını (her zaman C# olarak tanımlanmalıdır) tutmadığı için çok daha okunabilir. Ancak performans noktasında da ilgileniyorum. –