【问题标题】:how can I bind Bing Pushpins from multiple models?如何绑定来自多个模型的 Bing 图钉?
【发布时间】:2011-09-05 08:30:45
【问题描述】:

我的 WP7 应用程序需要在来自多个数据源的 bing 地图上显示图钉,但我不确定最好的方法。

例如,它会是这样的,我从 Web 服务收到人员列表、建筑物列表、兴趣点列表等。我需要在他们自己的视图中单独显示这些,但也显示它们在一张地图上,每种类型都有不同的图像。

我正在尝试使用 MVVM 方法,因此有一个 Person 类、一个建筑物类等等,每一个都有一个位置。然后,我为每种类型都有一个 ObservableCollection,因此使用数据绑定很容易为每种类型创建一个视图。

目前我只有一个 ViewModel,但我的第一个想法是我认为我真的应该每种类型都有一个 ViewModel。那么 PersonViewModel、BuildingViewModel 在这里呢?然而,地图视图需要从这些视图中的每一个中获取信息,我不确定您如何将视图绑定到这样的多个 ViewModel,或者即使这是明智的。

MapItemsControl 似乎也只能绑定到一个东西,那么我怎样才能将它绑定到多个不同的数据源呢?我以为我可以创建一个简单的图钉类,但这意味着要复制每种类型的数据,我最终希望能够单击图钉以显示图钉的详细信息,因此希望将类型分开

非常感谢任何关于前进道路的指针

【问题讨论】:

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


    【解决方案1】:

    正如您所说,使用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>
    

    【讨论】:

    • 感谢您的回答。我离得不远,但我没有意识到你可以有多个MapItemsControl 元素与这样的地图相关联,这是我错过的。使用您提供的这些信息应该会给我前进所需的指示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多