2011-09-05 2 views
0

여러 데이터 소스의 빙지도에 압핀을 표시하려면 WP7 애플리케이션에 대한 요구 사항이 있으며이 작업을 수행하는 가장 좋은 방법은 확실하지 않습니다.여러 모델에서 Bing 압핀을 어떻게 바인딩 할 수 있습니까?

예를 들어, 웹 서비스에서 사람 목록, 건물 목록, POI 목록 등을 수신합니다. 개별적으로 개별보기에 표시해야하지만 표시 할 수도 있습니다. 각 유형별로 서로 다른 이미지가있는지도에 표시됩니다.

MVVM 접근 방식을 사용하여 Person 클래스, 건물 클래스 클래스 등을 가지려고합니다. 각 클래스에는 위치가 있습니다. 그런 다음 각 유형에 대해 ObservableCollection을 사용하므로 데이터 바인딩을 사용하여 각각에 대해 View를 수행하기가 쉽습니다.

현재 하나의 ViewModel 만 있지만 첫 번째 생각은 유형 당 하나의 ViewModel이 있어야한다고 생각합니다. PersonViewModel, BuildingViewModel은 여기에 있습니까? 그러나 Map View는 이러한 각각의 뷰로부터 정보를 가져와야 할 필요가 있으며, 뷰를 여러 ViewModel에 바인딩하는 방법이나 이것이 현명한 방법인지는 잘 모르겠습니다.

MapItemsControl도 한 가지에만 바인딩 할 수있는 것처럼 보이므로 어떻게 여러 다른 데이터 소스에 바인딩 할 수 있습니까? 나는 간단한 압정기 클래스를 만들 수 있다고 생각했지만, 그것은 각 타입의 데이터를 복제하는 것을 의미 할 것이고 결국에는 핀의 세부 정보를 표시하기 위해 압핀을 클릭 할 수 있기를 바라며 타입을 분리하여 유지하려고합니다.

앞으로 나아가는 모든 포인터는 높이 평가되었습니다

답변

5

사용하면 MapItemsControl 당신이 말하는대로, 그것을하는 방법입니다. 그리고 그것은 매우 쉽습니다. 당신이 원하는 것은 각각의 타입에 대한 ObservableCollection을 가진 ViewModel입니다.

그래서 당신의 문제는 당신이 스타일과 ItemTemplates를 사용하는 방법을 이해하지 못한다는 것입니다.

원하는 경우 각 유형마다 동일한 스타일을 사용하고 각 MapItemsControl.ItemTemplate에 적용 할 공통 ItemTemplate을 정의하면됩니다. 마찬가지로 원하는 경우 원하는대로 각 압핀에 전역으로 적용하는 사용자 정의 스타일을 정의 할 수 있습니다.

<Grid.Resources> 
    <DataTemplate x:Name="PushpinItemTemplate"> 
     <maps:Pushpin Location="{Binding Location}" Tap="Pushpin_Tap" Style="{StaticResource PushpinStyle}" /> 
    </DataTemplate> 
</Grid.Resources> 

... 

<maps:Map> 
    <maps:MapLayer> 
     <maps:MapItemsControl ItemsSource="{Binding People}" ItemTemplate="{StaticResource PushpinItemTemplate}" /> 
     <maps:MapItemsControl ItemsSource="{Binding Buildings}" ItemTemplate="{StaticResource PushpinItemTemplate}" /> 
    </maps:MapLayer> 
</maps:Map> 
+0

답변 해 주셔서 감사합니다. 필자는 너무 멀지 않았지만, 내가 놓친 것 같은 맵과 연관된 여러 MapItemsControl 요소를 가질 수 있다는 것을 깨닫지 못했다. 제공 한이 정보를 사용하여 앞으로 나아갈 수있는 지침을 제공해야합니다. – Firedragon

+0

이렇게하면 많은 도움이되었습니다 .-). – Afra

관련 문제