我的 WP7 应用程序要求在来自多个数据源的 bing map 上显示图钉,但我不确定执行此操作的最佳方法。
因此,例如,它会是这样的,我从网络服务收到人员列表、建筑物列表、兴趣点列表等。我需要在他们自己的 View 中单独显示这些,但也要在 map 上显示它们每种类型都有不同的图像。
我正在尝试使用 MVVM 方法,因此有一个 Person 类、一个建筑物类等等,每一个都有一个位置。然后,我为这些类型中的每一个都有一个 ObservableCollection,因此使用数据绑定(bind)很容易为每个类型执行一个 View 。
目前我只有一个 ViewModel,但我的第一个想法是我认为我真的应该每种类型都有一个 ViewModel。那么 PersonViewModel、BuildingViewModel 在这里呢?然而, map View 需要从这些 View 中的每一个中获取信息,我不确定如何将 View 绑定(bind)到这样的多个 View 模型,或者即使这是明智的。
MapItemsControl 似乎也只能绑定(bind)到一件事,那么我怎样才能将它绑定(bind)到多个不同的数据源呢?我以为我可以创建一个简单的图钉类,但这意味着要复制每种类型的数据,我最终希望能够单击图钉以显示图钉的详细信息,因此希望将类型分开
非常感谢任何有关前进道路的指示
最佳答案
使用 MapItemsControl
就像你说的那样,做这件事的方法。这很容易。您想要的是一个 ViewModel,其中每个类型都有一个 ObservableCollection,正如您所说的那样。
所以我猜你的问题是你不明白如何使用样式和项目模板。
如果您想要的是为每种不同的类型使用相同的样式,那么只需定义一个通用的 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>
关于silverlight - 如何绑定(bind)来自多个模型的 Bing 图钉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7305582/