Bing Maps コントロールと共に WP7 で MvvmCross を使用しているアプリを作成しています。タイプのプロパティを含む of にMapItemsControl
ItemSource
をObservableCollection
バインドしようとしています。場所の緯度と経度に関する情報を含む単純なクラスです。に入力する場所は、リッスンするサービスによって取得され、場所が取得されるとコレクションが更新されます。地図上に場所が表示されていないため、機能していないようですが。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>
ビューモデルは次のようになります。
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);
}
}
}
ここで私が間違っていることを誰かが見ることができますか?