Tengo un control de usuario que aloja otros controles. La forma en que implementé esto es a través de plantillas de datos que definen el control que debería estar asociado con un modelo de vista específico. Estos modelos de vista tienen propiedades similares y desencadenantes de interacción. Por favor, vea el fragmento de XAML a continuación.¿Hay alguna forma de consolidar enlaces de datos y/o disparadores similares en XAML?
El problema con este enfoque es que tendría que copiar y pegar los enlaces de datos si deseo admitir un nuevo modelo de vista. ¿Hay alguna manera de consolidar todos los enlaces de datos y/o disparadores similares en una plantilla? No quiero escribir/copiar y pegar las mismas definiciones de enlace de datos en cada control. (Sí, lo sé, soy así de perezoso.)
<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>
Por favor, consulte este enlace. http://stackoverflow.com/questions/1665267/datatemplate-datatypecollectionentity –
Por favor, consulte este enlace. http://stackoverflow.com/questions/1665267/datatemplate-datatypecollectionentity –
Creo que eso es para un problema completamente diferente. Eso es para una lista de artículos. Mi problema es tratar con objetos de rasgos similares. –