地图控件SetView只在页面第一次加载时起作用

本文关键字:第一次 加载 起作用 控件 SetView 地图 | 更新日期: 2023-09-27 17:50:58

我在WP7应用程序中使用必应地图控件时遇到了一个问题。

当我导航到具有地图控件的页面时,它启动GeoCoordinateWatcher。当GeoCoordinateWatcher为我提供一些位置数据时,它调用SetView()方法将地图居中于当前位置。在ApplicationBar上也有一个按钮,也可以启动GeoCoordinateWatcher

现在,事情是,当我第一次导航到这个页面时,一切都很好:GeoCoordinateWatcher开始,一段时间后给我位置数据,在我需要的时候调用SetView()和地图中心。按钮也一样。

但是如果我按后退按钮回到主页,然后尝试再次导航到地图页面,SetView()停止工作。在调试中,我看到围绕它的代码按预期工作,传递给SetView()的数据是正确的,但是控件和更改视图的事件都没有发生。

我假设地图初始化(或处理导航)可能有问题,但我不知道在哪里挖掘。

编辑:

我试过直接改变Map.Center,它不以完全相同的方式工作,SetView()不:它工作得很好,第一次页面导航到,不工作在其他时间。

编辑2:好吧,还有更奇怪的。在调试中,我看到映射的中心被设置为正确的值。但是一个实际的控件显示了完全不同的位置,而我,移动地图,不会改变我从代码中看到的值。

编辑3:我添加了一个按钮到ApplicationBar,只是调用SetView(),它工作得很好。显然,由于GeoCoordinateWatcher.PositionChanged事件引发,当我调用SetView()时出现问题。我怎么才能解决这个问题呢?

地图控件SetView只在页面第一次加载时起作用

尝试使用map.Center = loc.CoOrdinates;

我找到解决办法了。

在我的原始代码中,我在页面构造函数中订阅了GeoCoordinateWatcher.Position属性更改事件:App.PropertyChanged += AtmInfoPageOnAppPropertyChanged

我所要做的就是将其移动到OnNavigatedTo事件处理程序,并将App.PropertyChanged -= AtmInfoPageOnAppPropertyChanged添加到OnNavigatedFrom事件处理程序。

我认为,问题在于保持旧页面订阅事件不允许它被处置,同时不允许新页面订阅相同的事件,从而导致代码被调用不同的页面和不同的地图控件,而不是显示在屏幕上。