C# WPF-数据模板代码在items集合外的可重用性
我在WPF项目中使用Bing地图,我想使用带有地图的通用样式的整体项目视图。关于Bing地图并不重要,这里的问题是DataTemplate中定义的代码对于ViewModel的单个对象的可重用性 在下面的代码中,有一个用于放置在地图上的图像的数据模板。它对集合中的ViewModel项具有一些属性绑定C# WPF-数据模板代码在items集合外的可重用性,c#,wpf,templates,mvvm,C#,Wpf,Templates,Mvvm,我在WPF项目中使用Bing地图,我想使用带有地图的通用样式的整体项目视图。关于Bing地图并不重要,这里的问题是DataTemplate中定义的代码对于ViewModel的单个对象的可重用性 在下面的代码中,有一个用于放置在地图上的图像的数据模板。它对集合中的ViewModel项具有一些属性绑定 <DataTemplate x:Key="HeadingArrowsDataTemplate"> <Image Source="/Intens.C2XTestPlatform
<DataTemplate x:Key="HeadingArrowsDataTemplate">
<Image Source="/Intens.C2XTestPlatform.Frontend;component/Images/Maps/Arrow.png"
m:MapLayer.Position="{Binding PointLocation}"
RenderTransformOrigin="0.5,1"
Width="100"
Height="100"
Visibility="{Binding Path=PointLocation, Converter={StaticResource IsNotNullVisibilityConverter}}">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform Angle="{Binding Heading}" />
<TranslateTransform X="-50"
Y="-100" />
</TransformGroup>
</Image.RenderTransform>
</Image>
</DataTemplate>
在另一个视图中,我只有一个ViewModel对象(RelevanceLineVM
),我必须从DataTemplate复制粘贴代码以获得相同的外观和绑定
<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>
如何为单个ViewModel和ViewModel集合创建通用模板
编辑
ASh的答案是有效的,但不幸的是,仅适用于DataTemplate中的这些属性,这些属性是从
ContentControl
类继承的。其他未正确绑定 添加ContentControl并重新使用其ContentTemplate的HeadingArrowsDataTemplate
<m:Map Name="ucMap"
Mode="Road"
CredentialsProvider="{Binding MapCredentialsProvider}">
<ContentControl Content="{Binding RelevanceLineVM}"
ContentTemplate="{StaticResource HeadingArrowsDataTemplate}"/>
</m:Map>
除了m:MapLayer.Position=“{Binding PointLocation}”
@Majak之外,它工作得很好。不幸的是,我不熟悉Map、mapitemscoontrol或MapLayer.Position以及它们如何一起工作,但我会尝试在ContentControl上重复m:MapLayer.Position=“{Binding PointLocation}”
,这很有帮助。谢谢不幸的是,它似乎只适用于DataTemplate中的这些属性,这些属性是从FrameworkElement
类继承的。其他未正确绑定。
<m:Map Name="ucMap"
Mode="Road"
CredentialsProvider="{Binding MapCredentialsProvider}">
<ContentControl Content="{Binding RelevanceLineVM}"
ContentTemplate="{StaticResource HeadingArrowsDataTemplate}"/>
</m:Map>