0

私の WP7 アプリケーションでは、複数のデータ ソースからの bing マップに画鋲を表示する必要がありますが、これを行う最善の方法がわかりません。

たとえば、Web サービスから人のリスト、建物のリスト、POI のリストなどを受け取ります。これらを独自のビューで個別に表示するだけでなく、地図上にも表示する必要があります。種類ごとにイメージが異なります。

私は MVVM アプローチを使用しようとしているので、Person のクラス、建物のクラスなどがあります。これらにはそれぞれ場所があります。次に、これらの型ごとに ObservableCollection があるので、データ バインディングを使用すると、これらの型ごとに View を簡単に作成できます。

現時点では ViewModel は 1 つしかありませんが、最初に考えたのは、タイプごとに ViewModel を 1 つ持つべきだということです。では、PersonViewModel、BuildingViewModel はこちらですか? ただし、マップビューはこれらの各ビューから情報を取得する必要があり、ビューをこのように複数のビューモデルにバインドする方法、またはそれが賢明である場合でもわかりません。

MapItemsControl も 1 つのものにしかバインドできないようですが、このように複数の異なるデータ ソースにバインドするにはどうすればよいですか? 単純な画鋲クラスを作成できると思っていましたが、それは各タイプのデータを複製することを意味し、最終的には画鋲をクリックしてピンの詳細を表示できるようにしたいので、タイプを分けておきたいと思いました

前進するための指針は非常に高く評価されています

4

1 に答える 1

5

MapItemsControlあなたが言うように、それを行う方法です。そして、それはとても簡単です。必要なのは、すでに持っていると言うように、タイプごとに ObservableCollection を持つ ViewModel です。

あなたの問題は、Styles と ItemTemplates の使い方を理解していないことだと思います。

異なるタイプのそれぞれに同じスタイルを持たせたい場合は、それぞれにItemTemplate適用するコモンを定義するだけですMapItemsControl.ItemTemplate。同様に、必要に応じて、各プッシュピンにグローバルに適用するカスタム スタイルを定義できます。

<Grid.Resources>
    <DataTemplate x:Name="PushpinItemTemplate">
        <maps:Pushpin Location="{Binding Location}" Tap="Pushpin_Tap" Style="{StaticResource PushpinStyle}" />
    </DataTemplate>
</Grid.Resources>

...

<maps:Map>
    <maps:MapLayer>
        <maps:MapItemsControl ItemsSource="{Binding People}" ItemTemplate="{StaticResource PushpinItemTemplate}" />
        <maps:MapItemsControl ItemsSource="{Binding Buildings}" ItemTemplate="{StaticResource PushpinItemTemplate}" />
    </maps:MapLayer>
</maps:Map>
于 2011-09-05T08:57:23.557 に答える