Ich habe ein Benutzersteuerelement, das andere Steuerelemente hostet. Die Art und Weise, wie ich dies implementiert habe, geschieht über Datenvorlagen, die das Steuerelement definieren, das einem bestimmten Ansichtsmodell zugeordnet werden soll. Diese Ansichtsmodelle haben ähnliche Eigenschaften und Interaktionsauslöser. Bitte beachten Sie das XAML-Snippet unten.Gibt es überhaupt eine Konsolidierung ähnlicher Datenbindungen und/oder Trigger in XAML?
Das Problem mit diesem Ansatz ist, dass ich die Datenbindungen kopieren und einfügen müsste, wenn ich ein neues Ansichtsmodell unterstützen möchte. Gibt es eine Möglichkeit, alle ähnlichen Datenbindungen und/oder Trigger in einer Vorlage zu konsolidieren? Ich möchte nicht die gleichen Datenbindungsdefinitionen in jedes Steuerelement eingeben/kopieren. (Ja, ich weiß, ich bin so faul.)
<UserControl.Resources>
<DataTemplate DataType="{x:Type vm:SomeViewModel1}">
<TextBlock Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<cmd:EventToCommand Command="{Binding MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SomeViewModel2}">
<Rectangle Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<cmd:EventToCommand Command="{Binding MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SomeViewModel3}">
<Button Canvas.Left="{Binding Left}"
Canvas.Top="{Binding Top}"
RenderTransform="{Binding Transform}"
Height="{Binding Height}"
Width="{Binding Width}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<cmd:EventToCommand Command="{Binding MouseEnterCommand}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeave">
<cmd:EventToCommand Command="{Binding MouseLeaveCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SomeViewModel4}">
<!-- Do not want copy-paste code here... -->
</DataTemplate>
</UserControl.Resources>
Bitte überprüfen Sie diesen Link. http://stackoverflow.com/questions/1665267/datatemplate-datatypecollectionentity –
Bitte überprüfen Sie diesen Link. http://stackoverflow.com/questions/1665267/datatemplate-datatypecollectionentity –
Ich denke, das ist für ein anderes Problem insgesamt. Das ist für eine Liste von Elementen. Mein Problem ist der Umgang mit Objekten ähnlicher Eigenschaften. –