2013-10-02 3 views
1

, когда я пытаюсь добавить маркеры userlocation на мою карту в телефоне Windows 8 по шаблону, все точки появляются в верхнем левом углу карты. я уверен в том, что я в разных местах, это мой код:Как добавить маркеры для отображения в windowsphone 8 по шаблону?

  <maps:Map x:Name="myMap" Center="{Binding CenterPoint}" ZoomLevel="5"> 
      <toolkit:MapExtensions.Children> 
        <ItemsControl ItemsSource="{Binding AllLocations}"> 
         <ItemsControl.ItemsPanel> 
          <ItemsPanelTemplate> 
           <Grid/> 
          </ItemsPanelTemplate> 
         </ItemsControl.ItemsPanel> 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
          <toolkit:MapChildControl> 
           <toolkit:UserLocationMarker Background="Blue" Foreground="Green" GeoCoordinate="{Binding coordinate,Converter={StaticResource GeoCoordinateConverter}}"/> 
          </toolkit:MapChildControl> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 

        </ItemsControl> 
      </toolkit:MapExtensions.Children> 

     </maps:Map> 

ответ

6

К сожалению, определение привязки в XAML не работает. Не знаю почему. - Вероятно, нужно сделать так, чтобы XAML разбирался и строился во время выполнения.

Вы можете, однако, установить привязку в коде, и она будет работать.

Это из рабочего приложения:

<map:Map x:Name="TheMap"> 
    <toolkit:MapExtensions.Children> 
     <toolkit:MapItemsControl> 
      <toolkit:MapItemsControl.ItemTemplate> 
       <DataTemplate> 
        <toolkit:Pushpin GeoCoordinate="{Binding Converter={StaticResource PinToGeoCoordinateConverter}}" 
             Content="{Binding Name}" /> 
       </DataTemplate> 
      </toolkit:MapItemsControl.ItemTemplate> 
     </toolkit:MapItemsControl> 
    </toolkit:MapExtensions.Children> 
</map:Map> 

Loaded событие для страницы (в коде позади)

private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) 
{ 
    this.Loaded -= OnLoaded; 

    // Have to set up the ItemSource explicitly - unfortunately this doesn't work if set in XAML :(
    var children = MapExtensions.GetChildren(TheMap); 
    var obj = children.FirstOrDefault(x => x is MapItemsControl) as MapItemsControl; 

    obj.ItemsSource = ViewModel.Pins; 
} 
+0

MapItemsControl, кажется, не Привязываемое. Ваш код только устанавливает ItemSource, он не обнаруживает изменений. Я попытался вручную выполнить привязку, но MapItemsControl не наследует FragmentsElement, поэтому GetBindingExpression() не доступен. – Thomas

+0

Еще я решил это, установив ObservableCollection и просто изменив содержимое. – Thomas

Смежные вопросы