我正在尝试使用 MVVM 代码结构在 Windows Phone 8 上工作的地图叠加层。我似乎无法让 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
地图控件所期望的类型。地图绑定的中心工作正常,但覆盖上的地理坐标不会绑定,蓝色圆圈只是位于地图的左上角。
我已经通过调试验证了 PropertyChanged 事件正在为我的模型触发,因为地图本身的中心正在更新,甚至尝试传递 null 来触发所有字段都无济于事。
我已经检查了调试并且 MapOverlay GeoCoordinate 的属性似乎总是为空。我尝试将以下内容添加到代码隐藏中,将圆圈放在我想要的位置,但我似乎无法根据事件发生它......
GpsCoordinateConverter converter = new GpsCoordinateConverter();
Map.Layers[0][0].GeoCoordinate = (GeoCoordinate)converter.Convert(((ViewModel.ReportViewModel)DataContext).MapCenter, typeof(GeoCoordinate), null, null);
有谁知道为什么会这样或如何解决这个问题?我不想为此放弃 MVVM 架构。