0

关于使用以下代码段的快速问题:

var locations = CurrentItems.Select(model => model.Location);
map.SetView(LocationRect.CreateLocationRect(locations));

如此答案中所建议: 缩放以显示必应地图中的所有位置

我正在异步检索地理坐标列表,并使用 ObservableCollection 将它们绑定到 Bing 地图;使用以下命令将结果数据复制到主 UI 线程:

Deployment.Current.Dispatcher.BeginInvoke( ()=> {...} )

我的问题是,我无法在 Dispatcher 中引用地图控件(或者我可以吗??),那么如何使用以下方法将新的 Pushpin 位置应用于地图:

map.SetView(LocationRect.CreateLocationRect(locations));

谢谢,S。

4

2 回答 2

0

因为Map归根结底,DependencyObject它却有它自己的来源Dispatcher。你可以这样做;

map.Dispatcher.BeginInvoke(() => map.SetView(LocationRect.CreateLocationRect(locations)));

此外,值得注意的是,您只需要BeginInvoke()CheckAccess()返回 false 时调用。(CheckAccess带有EditorBrowsable(EditorBrowsableState.Never)属性标记,因此它不会显示在智能感知中,您必须手动输入)。常见的模式是;

if (map.Dispatcher.CheckAccess() == false) {
  map.Dispatcher.BeginInvoke(() => map.setView(LocationRect.CreateLocationRect(locations)));
} else {
  map.SetView(LocationRect.CreateLocationRect(locations));
}
于 2012-05-10T12:50:11.967 回答
0

我也许你会发现这篇文章很有用。要绑定地图视图和 ViewModel,所描述的方法使用 DependecyPropety:http ://sveiberg.wordpress.com/2012/06/24/5/ 。

于 2012-06-24T19:43:05.333 回答