私はWPFプロジェクトでBingマップを使用しています。一般的なスタイルの全体的なプロジェクトView with mapを使用したいと思います。これはBingマップに関する重要なことではありません。ここでの問題は、ViewModelの単一オブジェクトに対してもDataTemplateで定義されたコードの再利用性です。WPF - アイテムコレクションからのDataTemplateコードの再利用
次のコードには、マップ上に配置されたイメージ用のDataTemplateがあります。コレクションの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>
私はのviewmodelsコレクション(RelevanceLinesVM
)の最初のビューでそれを使用します。他のビューで
<m:Map CredentialsProvider="{Binding MapCredentialsProvider}"
Mode="Road"
x:Name="ucMap">
<m:MapItemsControl ItemsSource="{Binding RelevanceLinesVM}"
helpers:MapFixBehavior.FixUpdate="True"
ItemTemplate="{StaticResource HeadingArrowsDataTemplate}"
</m:Map>
、私は、単一の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の答えの作品が、残念ながら唯一ContentControl
クラスから継承されたDataTemplateでは、これらの特性のために。他は適切に束縛されていません。
ため
HeadingArrowsDataTemplate
を再利用:MapLayer.Position = "{バインディングPointLocation}" '。 – Majak@Majak、残念ながら私はMap、MapItemsControl、MapLayer.Positionとそれらがどのように連携しているかに精通していませんが、ContentControlで 'm:MapLayer.Position =" {Binding PointLocation} "を繰り返すこともできます。 – ASh
OKこれは助けになった。ありがとう! – Majak