我正在创建一个应用程序,我在 WP7 上使用 MvvmCross 以及 Bing Maps 控件。我正在尝试将 绑定MapItemsControl
ItemSource
到包含type 的属性的ObservableCollection
of 。是一个简单的类,其中包含有关位置的纬度和经度的信息。我填充到其中的位置由我监听的服务获取,并在它获取位置时更新集合。虽然它似乎不起作用,因为地图上没有显示任何位置。为了绑定s,我制作了一个转换器,它可以简单地转换为可以理解的转换器。我知道转换器在我使用它绑定到属性时工作。LocationDataSource
MapPosition
GeoPoint
GeoPoint
ObservableCollection
ViewModel
GeoPoint
GeoCoordinate
MapItemsControl
Map
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);
}
}
}
谁能看到我在这里做错了什么?