2014-04-21 39 views
0

我试图从列表中添加多个图钉到Windows Phone上的Bing地图。每个图钉的名称需要不同,因为我希望能够在以后使用MainMap.Children.Remove(SpecificPushpin);单独删除它们。Bing Maps列表中的项目添加新图钉

这是我的foreach:

Pushpin pushpin = new Pushpin(); 
Attractions attractions = new Attractions(); 
foreach (var attraction in Attractions.allAttractions) 
{ 
    pushpin.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude); 
    pushpin.Content = attraction.Title; 
    pushpin.Background = new SolidColorBrush(Colors.Blue); 
    pushpin.Foreground = new SolidColorBrush(Colors.White); 
    MainMap.Children.Add(pushpin); 
} 

当然,我收到一个错误通过对MainMap.Children.Add(pushpin);行的foreach第一循环之后,因为“图钉”已经是现有名称。

我也是用这个尝试:

MainMap.Children.Add(new Pushpin() { Content = attraction.Title, GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude), Background = new SolidColorBrush(Colors.Yellow), Foreground = new SolidColorBrush(Colors.Black) }); 

但后来我将永远无法individualy移去那些所谓的图钉。

有谁知道我可以给我的列表中的每个图钉一个变量名,或知道另一种方法来解决我的问题?

+0

化妆'pushpin' foreach循环内部对象。 –

+0

通过这样做,我仍然无法删除某些图钉,对吧?我试过这样做:'if(AppSettings.Contains(“cbxAttractionChecked”)) { MainMap.Children.Remove(pushpin); }' 如果用户取消选中某个复选框,就会发生这种情况。这虽然不起作用。 – user3478148

回答

1

我没有使用Bing地图,而是使用地图控件并使用MapLayersMapOverlay。我为每个列表类创建了不同的MapLayer,并单独删除这些列表。

这使得可以简单地删除一个图钉列表。这里有一个例子:

private void LoadAttractions() 
    { 
     if (cbxAttractions.IsChecked != false) 
     { 
      Attractions attractions = new Attractions(); 
      foreach (var attraction in Attractions.allAttractions) 
      { 
       Pushpin pushpin = new Pushpin(); 
       pushpin.Name = attraction.Title; 
       pushpin.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude); 
       pushpin.Content = attraction.Title; 
       pushpin.Background = new SolidColorBrush(Colors.Yellow); 
       pushpin.Foreground = new SolidColorBrush(Colors.Black); 

       MapOverlay MyOverlay = new MapOverlay(); 
       mapLayerAttractions.Add(MyOverlay); 

       MyOverlay.Content = pushpin; 
       MyOverlay.GeoCoordinate = new GeoCoordinate(attraction.Latitude, attraction.Longtitude); 
       MyOverlay.PositionOrigin = new Point(0.0, 1.0); 

      } 
      MainMap.Layers.Add(mapLayerAttractions); 
     } 
    } 

cbxAttractions被窃听:

private void cbxAttractions_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
     if (cbxAttractions.IsChecked == false) 
     { 
      MainMap.Layers.Remove(mapLayerAttractions); 
     } 
     else 
     { 
      LoadAttractions(); 
     } 
    } 
0

您可以给每个图钉一个属性,例如:标签。每个标签与另一个标签不同。所以当你删除一个特定的图钉。您可以使用这样的foreach:

foreach(PushPin pushpin in yourPushpinList) 
{ 
    if (pushpin.Tag == yourValue) 
    { 
     MainMap.Children.Remove(SpecificPushpin); 
     break; 
    } 
} 

代码可能不正确,它只是一个例子。

+0

好吧,我明白了!但是,如何将图钉添加到地图? 'MainMap.Children.Add(图钉);'是不是会工作,那么对吗? – user3478148

+0

也可能是一个问题,是我希望能够一次删除该列表中的所有图钉。你看,我有两个列表,我都以同样的方式接收和显示。我希望用户能够点击一个复选框并从地图上删除只有一个列表的图钉。我不能用'MainMap.Children.Clear();'做到这一点。这样整个地图将从图钉清除。 – user3478148