1

我在 WP7 应用程序中使用的 Bing 地图控件存在问题。

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

现在,问题是,当我第一次导航到此页面时,一切正常:GeoCoordinateWatcher开始,一段时间后给我位置数据,SetView()在我需要时调用和地图中心。按钮也一样。

但是,如果我按返回按钮返回主页,然后尝试再次导航到地图页面,则SetView()停止工作。在调试中,我看到围绕它的代码按预期工作并且传递给的数据SetView()是正确的,但是控件没有任何反应,并且更改视图的事件也不会触发。

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

编辑: 我尝试过Map.Center直接更改,但它的工作方式与SetView()不一样:它在第一次导航到页面时工作正常,在其他时间不起作用。

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

编辑 3: 我添加了一个按钮来ApplicationBar调用SetView()它,它工作正常。显然,当我SetView()GeoCoordinateWatcher.PositionChanged事件引发而调用时,就会出现问题。我怎么能解决这个问题?

4

2 回答 2

0

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

于 2013-01-07T06:44:35.377 回答
0

我找到了解决方案。

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

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

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

于 2013-01-07T13:29:22.047 回答