我的WP7应用程序中有要求在多个数据源的bing地图上显示图钉,我不知道最好的方法。
所以例如它会是这样的,我从网络服务收到人员列表,建筑物列表,POI列表等。我需要在他们自己的视图中单独显示这些,但也显示它们在地图上为每种类型的不同图像。
我正在尝试使用MVVM方法,因此有一个Person类,一个建筑类等等,每个类都有一个位置。然后我为每个类型都有一个ObservableCollection,所以使用数据绑定很容易为每个类型做一个View。
目前我只有一个ViewModel,但我首先想到的是我认为每个类型应该有一个ViewModel。那么PersonViewModel,BuildingViewModel在这里?但是,Map View需要从这些视图中获取信息,我不确定如何将视图绑定到多个ViewModel,或者即使这样也是合理的。
MapItemsControl似乎也只能绑定到一个东西,那么如何将它绑定到多个不同的数据源呢?我以为我可以创建一个简单的图钉类,但这意味着每个类型的数据都重复,我最终希望能够点击图钉来显示图钉的细节,所以希望保持类型分开
关于前进道路的任何指示都非常赞赏
答案 0 :(得分:5)
使用MapItemsControl
就像你说的那样,这样做。这很容易。你想要的是一个ViewModel,你的每个类型都有一个ObservableCollection,正如你所说的那样。
所以我猜你的问题是你不明白如何使用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>