我将尝试在Windows Phone 8上使用MVVM代码结构实现地图叠加层。我似乎无法正常将MapOverlay的GeoCoordinate属性绑定到我的ViewModel,并且无法弄清楚原因。
当前的XAML如下:
Header:
我已经验证了PropertyChanged事件对于我的模型来说是有效的,通过调试和因为地图本身的中心正在更新,甚至尝试传递null来触发所有字段,但都没有成功。
我已经在调试中检查了MapOverlay GeoCoordinate属性,它似乎总是为空。我尝试在代码后面添加以下内容,可以将圆圈放在我想要的位置,但我似乎无法根据事件让它发生...
当前的XAML如下:
Header:
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来触发所有字段,但都没有成功。
我已经在调试中检查了MapOverlay GeoCoordinate属性,它似乎总是为空。我尝试在代码后面添加以下内容,可以将圆圈放在我想要的位置,但我似乎无法根据事件让它发生...
GpsCoordinateConverter converter = new GpsCoordinateConverter();
Map.Layers[0][0].GeoCoordinate = (GeoCoordinate)converter.Convert(((ViewModel.ReportViewModel)DataContext).MapCenter, typeof(GeoCoordinate), null, null);
有人知道为什么会出现这种情况或者如何解决吗?我不想为此放弃MVVM架构。