2012-05-09 19 views
0

次のコードスニペットの使用に関してだけで簡単な質問:WP7 Bing Mapsのズームレベルプッシュピンコレクションの位置に基づいて

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

この回答で提案されているように: Zoom to show all locations in bing maps

私は取得していますGeocoordinate asynchrounslyのリストをObservableCollectionを使用してBing Mapにバインドします。使用して、メインUIスレッドに超える結果のデータをコピーする:

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

私の問題は、私はディスパッチャ内のマップコントロールを参照することができない(または私は??できる)、ということですので、どのように私は新しいを適用することができます使用してマップに画鋲の場所:

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

おかげで、 S.

答えて

0

Mapが最終的にDependencyObjectから派生しているので、それは実際には、独自のDispatcherを持っています。あなたはそうすることができます。

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

また、それはあなただけCheckAccess()が偽BeginInvoke()を呼び出す必要が注目に値します。 (CheckAccessEditorBrowsable(EditorBrowsableState.Never)という属性のタグが付いているため、Intellisenseに表示されないため、手動で入力する必要があります)。共通パターンは次のとおりです。

if (map.Dispatcher.CheckAccess() == false) { 
    map.Dispatcher.BeginInvoke(() => map.setView(LocationRect.CreateLocationRect(locations))); 
} else { 
    map.SetView(LocationRect.CreateLocationRect(locations)); 
} 
+0

お返事ありがとうございます。私の問題は、MVVMを使用しているということです。ビューモデルでは、場所のリストを取得し、Observable Collectionにバインドしてマップを更新しています。ビューモデルからマップ自体にアクセスすることはできません。そのため、View Modelからmap.Dispatcher.BeginInvokeを使用できますか? – StevieB

+1

どのMVVMフレームワークを使用していますか? – MrMDavidson

+0

@StevieBあなたのビューモデルが 'DependencyObject'から継承できない理由はありますか? –

0

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

+0

答えの2行目は意味をなさない。 –

関連する問題