silverlight - 如何绑定(bind)来自多个模型的 Bing 图钉?

标签 silverlight windows-phone-7 mvvm bing-maps pushpin

我的 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/

相关文章:

silverlight - Silverlight 4套接字ConnectAsync返回成功,但套接字未连接

c# - 好的 Silverlight 4.0 图表/图形组件?

windows-phone-7 - 将键盘移至控件上方

c# - 如何处理在 RichTextBox 中单击超链接的事件

c# - 在 WP7 中更改聚焦的文本框背景/前景

关于 View 和 View 模型的 Silverlight MVVM 问题

silverlight - 当 ObservableCollection 更改 WP7 时更新 CollectionViewSource

ios - 在 MVVM + Coordinator 中,如何处理 subview ?

xaml - 使用 MvvmCross 在 UWP 应用程序中打开新窗口

c# - WPF 两个列表框之间的单选