0

次のコード スニペットの使用に関する簡単な質問:

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

この回答で提案されているように: ズームしてbingマップのすべての場所を表示する

地理座標のリストを非同期に取得し、ObservableCollection を使用してこれらを Bing Map にバインドしています。以下を使用して、結果のデータをメイン UI スレッドにコピーします。

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

私の問題は、Dispatcher 内でマップ コントロールを参照できないことです (または参照できますか??)。そのため、次を使用して新しいプッシュピンの場所をマップに適用するにはどうすればよいですか?

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

ありがとう、S.

4

2 に答える 2

0

私はおそらくあなたがこの投稿が役に立つと思うでしょう。マップのビューとViewModelをバインドするには、説明されているメソッドでDependecyPropetyを使用します:http ://sveiberg.wordpress.com/2012/06/24/5/ 。

于 2012-06-24T19:43:05.333 に答える
0

Map最終的にはそれから派生するためDependencyObject、実際には独自のDispatcher. そのようにできます。

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

また、 false が返されたBeginInvoke()場合にのみ呼び出す必要があることに注意してください。CheckAccess()(属性CheckAccessでタグ付けされてEditorBrowsable(EditorBrowsableState.Never)いるため、IntelliSense には表示されません。手動で入力する必要があります)。一般的なパターンは次のとおりです。

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 に答える