我在我的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中的这些属性。其他不受约束。
答案 0 :(得分:1)
添加ContentControl并为其ContentTemplate重用HeadingArrowsDataTemplate
<m:Map Name="ucMap"
Mode="Road"
CredentialsProvider="{Binding MapCredentialsProvider}">
<ContentControl Content="{Binding RelevanceLineVM}"
ContentTemplate="{StaticResource HeadingArrowsDataTemplate}"/>
</m:Map>