WPF - DataTemplate代码在项集合中的可重用性

时间:2017-08-29 12:08:12

标签: c# wpf templates mvvm

我在我的WPF项目中使用Bing地图,我想使用通用样式整体项目View with map。关于Bing地图并不重要,这里的问题在于DataTemplate中定义的代码的可重用性,也适用于ViewModel的单个对象。

在下面的代码中,DataTemplate用于放置在地图上的图像。它有一些属性绑定来自集合的ViewModel项。

RelevanceLinesVM

我在第一个View for ViewModels集合( <m:Map CredentialsProvider="{Binding MapCredentialsProvider}" Mode="Road" x:Name="ucMap"> <m:MapItemsControl ItemsSource="{Binding RelevanceLinesVM}" helpers:MapFixBehavior.FixUpdate="True" ItemTemplate="{StaticResource HeadingArrowsDataTemplate}" </m:Map> )中使用它:

RelevanceLineVM

在其他视图中,我只有一个ViewModel对象( <m:Map Name="ucMap" Mode="Road" CredentialsProvider="{Binding MapCredentialsProvider}"> <Image DataContext="{Binding RelevanceLineVM}" Source="/Intens.C2XTestPlatform.Frontend;component/Images/Maps/Arrow.png" RenderTransformOrigin="0.5,1" Width="100" Height="100" m:MapLayer.Position="{Binding PointLocation}" Visibility="{Binding Path=PointLocation, Converter={StaticResource IsNotNullVisibilityConverter}}"> <Image.RenderTransform> <TransformGroup> <RotateTransform Angle="{Binding Heading}" /> <TranslateTransform X="-50" Y="-100" /> </TransformGroup> </Image.RenderTransform> </Image> </m:Map> ),我必须从DataTemplate复制粘贴代码以获得相同的外观和绑定。

ContentControl

如何为单个ViewModel和ViewModel集合创建通用模板?

修改

ASh的答案有效,但遗憾的是仅适用于继承自setDefaultRequestOptions(requestOptions)类的DataTemplate中的这些属性。其他不受约束。

1 个答案:

答案 0 :(得分:1)

添加ContentControl并为其ContentTemplate重用HeadingArrowsDataTemplate

<m:Map Name="ucMap"
       Mode="Road"
       CredentialsProvider="{Binding MapCredentialsProvider}">
    <ContentControl Content="{Binding RelevanceLineVM}"
                    ContentTemplate="{StaticResource HeadingArrowsDataTemplate}"/>
</m:Map>