MVVMコード構造を使用して、WindowsPhone8でマップオーバーレイを機能させようとしています。MapOverlayのGeoCoordinateプロパティをViewModelに適切にバインドできないようで、その理由を理解できません。
現状のXAMLは次のとおりです。
ヘッダ:
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps"
コード:
<maps:Map x:Name="Map" ZoomLevel="6" Height="500" Width="500" CartographicMode="Terrain" Center="{Binding MapCenter, Converter={StaticResource GpsCoordinateConverter}, Mode=TwoWay}">
<maps:Map.Layers>
<maps:MapLayer>
<maps:MapOverlay PositionOrigin="1,1" GeoCoordinate="{Binding MapCenter, Converter={StaticResource GpsCoordinateConverter}, Mode=OneWay}">
<Ellipse Fill="Blue" Height="20" Width="20" Opacity="50" />
</maps:MapOverlay>
</maps:MapLayer>
</maps:Map.Layers>
</maps:Map>
これGpsCoordinateConverter
は非常に単純なクラスであり、データ型をビューモデルからSystem.Device.Location.GeoCoordinate
マップコントロールが期待するものに変更します。マップバインディングの中心は正常に機能していますが、オーバーレイのGeoCoordinateはバインドされず、青い円はマップの左上にあります。
デバッグとマップ自体の中心が更新されているため、モデルに対してPropertyChangedイベントが発生していることを確認しました。さらに、nullを渡して、すべてのフィールドを無効にトリガーしようとしました。
デバッグをチェックインしましたが、MapOverlayGeoCoordinateのプロパティは常にnullのようです。必要な場所に円を配置するコードビハインドに次のように追加しようとしましたが、イベントに基づいてそれを実現できないようです...
GpsCoordinateConverter converter = new GpsCoordinateConverter();
Map.Layers[0][0].GeoCoordinate = (GeoCoordinate)converter.Convert(((ViewModel.ReportViewModel)DataContext).MapCenter, typeof(GeoCoordinate), null, null);
なぜこれが起こるのか、またはこれを修正する方法を誰かが知っていますか?このためにMVVMアーキテクチャを放棄したくありません。