gpt4 book ai didi

mvvm - MapOverlay 绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-12-01 06:43:58 24 4
gpt4 key购买 nike

我正在尝试使用 MVVM 代码结构在 Windows Phone 8 上运行 map 叠加层。我似乎无法让 MapOverlay 的 GeoCoordinate 属性正确绑定(bind)到我的 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 只是一个非常简单的类,它将数据类型从我的 View 模型更改为 map 控件所需的 System.Device.Location.GeoCoordinate。 map 绑定(bind)的中心工作正常,但叠加层上的 GeoCoordinate 不会绑定(bind),蓝色圆圈恰好位于 map 的左上角。

我已经通过调试验证了我的模型正在触发 PropertyChanged 事件,并且因为 map 中心本身正在更新,甚至尝试传递 null 来触发所有字段都无济于事。

我已经在调试中检查过,MapOverlay GeoCoordinate 的属性似乎始终为空。我尝试将以下代码添加到代码隐藏中,将圆圈放在我想要的位置,但我似乎无法根据事件让它发生......

GpsCoordinateConverter converter = new GpsCoordinateConverter();
Map.Layers[0][0].GeoCoordinate = (GeoCoordinate)converter.Convert(((ViewModel.ReportViewModel)DataContext).MapCenter, typeof(GeoCoordinate), null, null);

有谁知道为什么会这样或如何解决这个问题?我不想为此放弃 MVVM 架构。

最佳答案

这是 Silverlight XAML 解析器的限制。作为 XAML 元素属性的一部分初始化的对象将不参与同一逻辑树,因此没有数据上下文深入到它们。

为了对新的诺基亚 map 控件进行数据绑定(bind),请使用新的 Windows Phone Toolkit 中的 MapExtensions。 .例如这里的 how to create a PushPin in a specific GeoCoordinate使用 MapExtensions。

<maps:Map x:Name="Map" Grid.Row="1" Hold="OnMapHold">
<maptk:MapExtensions.Children>
<maptk:Pushpin x:Name="RouteDirectionsPushPin" Visibility="Collapsed"/>
<maptk:MapItemsControl Name="StoresMapItemsControl">
<maptk:MapItemsControl.ItemTemplate>
<DataTemplate>
<maptk:Pushpin GeoCoordinate="{Binding GeoCoordinate}" Visibility="{Binding Visibility}" Content="{Binding Address}"/>
</DataTemplate>
</maptk:MapItemsControl.ItemTemplate>
</maptk:MapItemsControl>
<maptk:UserLocationMarker x:Name="UserLocationMarker" Visibility="Collapsed"/>
</maptk:MapExtensions.Children>
</maps:Map>

关于mvvm - MapOverlay 绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com