1

我正在创建一个应用程序,我在 WP7 上使用 MvvmCross 以及 Bing Maps 控件。我正在尝试将 绑定MapItemsControl ItemSource到包含type 的属性的ObservableCollectionof 。是一个简单的类,其中包含有关位置的纬度和经度的信息。我填充到其中的位置由我监听的服务获取,并在它获取位置时更新集合。虽然它似乎不起作用,因为地图上没有显示任何位置。为了绑定s,我制作了一个转换器,它可以简单地转换为可以理解的转换器。我知道转换器在我使用它绑定到属性时工作。LocationDataSourceMapPositionGeoPointGeoPointObservableCollectionViewModelGeoPointGeoCoordinateMapItemsControlMap Center

绑定看起来像这样:

<maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
    <maps:MapItemsControl.ItemTemplate>
        <DataTemplate>
            <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
        </DataTemplate>
    </maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>

ViewModel 看起来像这样:

private ObservableCollection<LocationDataModel> _locations;
public ObservableCollection<LocationDataModel> Locations
{
    get { return _locations; } 
    set
    {
        _locations = value;
        FirePropertyChanged(() => Locations);
    }
}

我尝试了各种方法来更新Locations集合,这是在加载并准备好ViewModel后在事件处理程序中完成的ViewModel,我认为这会起作用:

Locations = LocationDataService.Locations;

我检查了LocationDataService.Locations它不是空的并且包含一个实际位置。我还尝试将集合实例化为ViewModel构造函数,然后将add每个元素实例化到集合中,这也没有在地图上显示任何内容。

编辑 根据评论中的要求。我已经尝试将这样的位置添加到集合中,它Locations = new ObservableCollection<LocationDataModel>();ViewModel构造函数中被实例化。然后在事件处理程序中填充如下:

private void LocationDataServiceOnLoadingChanged(object sender, EventArgs eventArgs)
{
    if (LocationDataService.IsInventoryLoaded)
    {
        foreach (var location in LocationDataService.Locations)
        {
            Locations.Add(location);
        }
    }
}

谁能看到我在这里做错了什么?

4

1 回答 1

1

正如我对该问题的评论中所述,我在 xaml 文件中发现了一个错误,我过早地关闭了Map控制标记,如下所示:

<maps:Map
    (..)
    />
<maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
    <maps:MapItemsControl.ItemTemplate>
        <DataTemplate>
            <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
        </DataTemplate>
    </maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>

相反,它必须是:

<maps:Map
    (..)
    >
    <maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
        <maps:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
            </DataTemplate>
        </maps:MapItemsControl.ItemTemplate>
    </maps:MapItemsControl>
</maps:Map>
于 2012-09-20T14:18:40.693 回答