Windows 8应用XAML / C#:设置多个图钉到Bing地图中的一个方法(Windows 8

2019-11-01 14:11发布

我奋力添加纬度和经度的集合作为在Bing地图图钉,在使用XAML和C#中的Windows 8应用。

通过一个使用事件处理程序添加一个图钉等地图上的右抽头正常工作。

这里是XAML:

 <bm:Map x:Name="myMap" Grid.Row="0" MapType="Road" ZoomLevel="14" Credentials="{StaticResource BingMapAPIKey}" ShowTraffic="False" Tapped="map_Tapped" >
      <bm:Map.Center>
            <bm:Location Latitude="-37.812751" Longitude="144.968204" />
      </bm:Map.Center>
 </bm:Map>

这里是处理:

    private void map_Tapped(object sender, TappedRoutedEventArgs e)
    {
        // Retrieves the click location
        var pos = e.GetPosition(myMap);
        Bing.Maps.Location location;
        if (myMap.TryPixelToLocation(pos, out location))
        {
            // Place Pushpin on the Map
            Pushpin pushpin = new Pushpin();
            pushpin.RightTapped += pushpin_RightTapped;
            MapLayer.SetPosition(pushpin, location);
            myMap.Children.Add(pushpin);

            // Center the map on the clicked location
            myMap.SetView(location);
        }
    }

所有上述作品。 如果我点击地图,新的图钉添加。

现在,当我尝试添加图钉通过反复名单上初始化页面时,只有列表中的最后一个图钉显示在地图上,仿佛每一个新的图钉被覆盖前一个。 下面是我使用的代码:

 protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
 {
      ...

      // The Venue class is a custom class, the Latitude & Logitude are of type Double
      foreach (Venue venue _venues)
      {
           Bing.Maps.Location location = new Location(venue.Latitude, venue.Longitude);

           // Place Pushpin on the Map
           Pushpin pushpin = new Pushpin();
           pushpin.RightTapped += pushpin_RightTapped;
           MapLayer.SetPosition(pushpin, location);
           myMap.Children.Add(pushpin);

           // Center the map on the clicked location
           myMap.SetView(location);
      }

      ...
 }

正如你所看到的,我使用相同的代码,但在LoadState的方法结束时,地图只显示最后一个位置。 如果你想知道,在foreach循环完全针对每个位置执行。

有没有办法让这个工作,甚至更好,直接在地图孩子绑定到图钉对象的ObservableCollection? 我觉得我是如此接近,但我想不出什么我错过了。

请帮忙 !

Answer 1:

你应该保持在一个阵列(或名单或更有效LocationCollection)的不同位置,并调用你循环throught您的元素后,才的setView方法。

  LocationCollection locationCollection = new LocationCollection ();
  // The Venue class is a custom class, the Latitude & Logitude are of type Double
  foreach (Venue venue _venues)
  {
       Bing.Maps.Location location = new Location(venue.Latitude, venue.Longitude);

       // Place Pushpin on the Map
       Pushpin pushpin = new Pushpin();
       pushpin.RightTapped += pushpin_RightTapped;
       MapLayer.SetPosition(pushpin, location);
       myMap.Children.Add(pushpin);


       locationCollection.Append(location);
  }
  myMap.SetView(new LocationRect(locationCollection));


文章来源: Windows 8 App XAML/C#: Set multiple pushpins to Bing map in one method