Как связать Bing Pushpins из нескольких моделей? - PullRequest
0 голосов
/ 05 сентября 2011

В моем приложении WP7 есть требование отображать кнопки на карте Bing из нескольких источников данных, и я не уверен, что это лучший способ сделать это.

Так, например, это будет что-то вроде этогоЯ получаю от веб-службы список людей, список зданий, список POI и т. Д. Мне нужно было бы отображать их индивидуально в их собственных представлениях, а также отображать их на карте с различными изображениями для каждого типа.

Я пытаюсь использовать подход MVVM, поэтому есть класс для Person, класс для здания и т. Д., У каждого из них есть местоположение.Затем у меня есть ObservableCollection для каждого из этих типов, и поэтому, используя привязку данных, достаточно просто сделать View для каждого из них.

На данный момент у меня есть только одна ViewModel, но я сначала подумал, что я думаю,Я действительно должен иметь одну ViewModel для каждого типа.Так PersonViewModel, BuildingViewModel здесь?Однако представление карты в таком случае должно было бы брать информацию из каждого из этих представлений, и я не уверен, как вы связываете представление с несколькими моделями представления, подобными этому, или даже если это разумно.

MapItemsControl также только кажется способнымпривязать к одной вещи, так как я могу привязать ее к нескольким различным источникам данных, как это?Я думал, что смогу создать простой класс меток, но это будет означать дублирование данных для каждого типа, и я в конечном итоге хочу иметь возможность нажимать на метки, чтобы отобразить детали для метки, поэтому хотел сохранить типы отдельно

Любые указатели на пути вперед очень ценятся

1 Ответ

5 голосов
/ 05 сентября 2011

Использование MapItemsControl - это, как вы говорите, способ сделать это.И это очень легко.То, что вы хотите, - это ViewModel с ObservableCollection для каждого из ваших типов, как вы говорите, у вас уже есть.

Итак, я полагаю, ваша проблема в том, что вы не понимаете, как использовать Styles и ItemTemplates.

Если вы хотите иметь одинаковый стиль для каждого из различных типов,просто определите общий ItemTemplate, который вы применяете к каждому MapItemsControl.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>
...