Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-数据模板代码在items集合外的可重用性_C#_Wpf_Templates_Mvvm - Fatal编程技术网

C# WPF-数据模板代码在items集合外的可重用性

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

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

在下面的代码中,有一个用于放置在地图上的图像的数据模板。它对集合中的ViewModel项具有一些属性绑定

<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>