EDIT : Après mon post, notre cher Rudy National, nous a aussi proposé sa solution disponible a cette adresse : http://www.rudyhuyn.com/blog/2013/03/19/wp8-binder-une-collection-sur-une-map-2-le-retour/
Avec WP8, les services cartographiques ont changés, mais les controles également ! Avec WP8 nous avons accés a un Map Control qui nous permet d'afficher une carte dans notre application !
On peut également rajouter des couches mais il est au final plus compliqués de gerer des Pushpin sur carte !
Et le toolkit nous sauva ...
Mais grâce au toolkit, nous a vons a disposition des extensions pour gerer les pushpin !
On peut gerer facielment l'ajout de pushpin grace au control Pushpin
Ajouter notre position courante grace au controle UserLocationMarker
Avoir une collection de pushpin !
Mais :|
Si on regarde le code du MapItemsControl on remarque qu'il derive de DependencyObject et pas de FrameworkElement, du coup le probleme qui se pose c'est qu'en cas de binding, le datacontext n'est pas propagé au MapItemsControl !
J'ai donc fait un petit behavior qui permet de gerer cela !
public class MapItemCollectionBehavior : Behavior<Map>
{
public IEnumerable<object> ItemsSource
{
get { return (IEnumerable<object>)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
// Using a DependencyProperty as the backing store for ItemSource. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register("ItemsSource", typeof(IEnumerable<object>), typeof(MapItemCollectionBehavior), new PropertyMetadata(OnSourceChanged));
private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var map = ((MapItemCollectionBehavior) d).AssociatedObject;
MapItemsControl mapItemsControl = MapExtensions.GetChildren(map).OfType<MapItemsControl>().FirstOrDefault();
if (mapItemsControl != null)
{
mapItemsControl.ItemsSource = ((MapItemCollectionBehavior) d).ItemsSource;
}
}
}
Pour l'utiliser rien de plus simple :
<maps:Map HorizontalAlignment="Stretch" ZoomLevel="15">
<i:Interaction.Behaviors>
<behaviors:MapItemCollectionBehavior ItemsSource="{Binding MyCollection}">
</behaviors:MapItemCollectionBehavior>
</i:Interaction.Behaviors>
<toolkit:MapExtensions.Children>
<toolkit:MapItemsControl>
<toolkit:MapItemsControl.ItemTemplate>
<DataTemplate>
<toolkit:Pushpin>
</toolkit:Pushpin>
</DataTemplate>
</toolkit:MapItemsControl.ItemTemplate>
</toolkit:MapItemsControl>
</toolkit:MapExtensions.Children>
</maps:Map>
Voilou :)