Bing Maps в каждом элементе списка добавьте новую метку

Я пытаюсь добавить несколько кнопок из списка в Bing Maps на Windows Phone. Название каждой метки должно быть разным, потому что я хочу иметь возможность удалить их по отдельности позже, используя MainMap.Children.Remove(SpecificPushpin);,

Это мой 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);
}

Конечно, я получаю ошибку после первого цикла через foreach на MainMap.Children.Add(pushpin); линия, потому что "канцелярская кнопка" - это уже существующее имя.

Я также попытался использовать это:

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) });

Но тогда я никогда не смогу вытащить индивидуальные защелки.

Кто-нибудь знает, как я могу дать имя переменной для каждой кнопки в моем списке, или знает другой способ решения моей проблемы?

2 ответа

Решение

Вместо использования Bing Maps я использовал Map Control и работал с MapLayers а также MapOverlay, Я создал другой 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();
        }
    }

Вы можете назначить каждому вашему Pushpin свойство, например:Tag. И каждый тег не совпадает с другим. Поэтому, когда вы удаляете конкретную канцелярскую кнопку. Вы можете использовать foreach так:

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

код может быть не правильным, это просто пример.

Другие вопросы по тегам