这是XAML代码:
<maps:Map x:Name="NearbyMap" Center="{Binding MapCenter,Mode=TwoWay}" ZoomLevel="{Binding ZoomLevel,Mode=TwoWay}" > <maptk:MapExtensions.Children> <maptk:MapItemsControl Name="StoresMapItemsControl" ItemsSource="{Binding Treks}"> <maptk:MapItemsControl.ItemTemplate> <DataTemplate> <maptk:Pushpin x:Name="RouteDirectionsPushPin" GeoCoordinate="{Binding Location}" Visibility="Visible" Content="test"/> </DataTemplate> </maptk:MapItemsControl.ItemTemplate> </maptk:MapItemsControl> <maptk:UserLocationMarker x:Name="UserLocationMarker" Visibility="Visible" GeoCoordinate="{Binding MyLocation}"/> </maptk:MapExtensions.Children> </maps:Map> xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps" xmlns:maptk="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit"
PushPinModel有一个属性Location,它是一个GeoCoordinate. Treks是一个ObservableCollection< PushPinModel>.我运行此代码,只显示UserLocationMarker,这是我当前的位置.
我终于使用依赖属性使其工作.我添加了一个新类:
原文链接:https://www.f2er.com/windows/371917.htmlpublic static class MapPushPinDependency { public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.RegisterAttached( "ItemsSource",typeof(IEnumerable),typeof(MapPushPinDependency),new PropertyMetadata(OnPushPinPropertyChanged)); private static void OnPushPinPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e) { UIElement uie = (UIElement)d; var pushpin = MapExtensions.GetChildren((Map)uie).OfType<MapItemsControl>().FirstOrDefault(); pushpin.ItemsSource = (IEnumerable)e.NewValue; } #region Getters and Setters public static IEnumerable GetItemsSource(DependencyObject obj) { return (IEnumerable)obj.GetValue(ItemsSourceProperty); } public static void SetItemsSource(DependencyObject obj,IEnumerable value) { obj.SetValue(ItemsSourceProperty,value); } #endregion }
xmlns:dp="clr-namespace:Treks.App.Util.DependencyProperties"
现在.xaml文件看起来像这样:
<maps:Map x:Name="NearbyMap" Center="{Binding MapCenter,Mode=TwoWay}" dp:MapPushPinDependency.ItemsSource="{Binding Path=Treks}" > <maptk:MapExtensions.Children> <maptk:MapItemsControl Name="StoresMapItemsControl"> <maptk:MapItemsControl.ItemTemplate> <DataTemplate> <maptk:Pushpin x:Name="PushPins" GeoCoordinate="{Binding Location}" Visibility="Visible" Content="test"/> </DataTemplate> </maptk:MapItemsControl.ItemTemplate> </maptk:MapItemsControl> <maptk:UserLocationMarker x:Name="UserLocationMarker" Visibility="Visible" GeoCoordinate="{Binding MyLocation}"/> </maptk:MapExtensions.Children> </maps:Map>
现在所有的图钉都被正确渲染.