Добавление нескольких кнопок на карту Bing

Я пытаюсь добавить несколько кнопок на карту Bing в приложении Windows 10. Я сталкиваюсь с проблемой, что добавляется только последний добавленный lat, long. Позвольте мне опубликовать мой код:

карта.xaml:

<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Hamburger_Heaven_Challenge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps"
x:Class="Hamburger_Heaven_Challenge.Map"
mc:Ignorable="d">

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Maps:MapControl x:Name="MyMap" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="700" Width="1260">

    </Maps:MapControl>
</Grid>

map.xaml.cs:

    public sealed partial class Map : Page
{
    PushPin pushPin = new PushPin();

    public Map()
    {
        this.InitializeComponent();

        AddPushPins();
        AddIcon();

        MyMap.Center = new Geopoint(new BasicGeoposition() {Latitude = 46.8442643, Longitude = 2.5992004 });
        MyMap.ZoomLevel = 6;

    }

    public void AddPushPins()
    {
        pushPin.AddPushPin(46.8442643, 2.5992004);
        pushPin.AddPushPin(48.873121, 2.374912);

    }

    public void AddIcon()
    {
        MapIcon myIcon = new MapIcon();
        myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
        myIcon.Title = "Apartment here";
        MyMap.MapElements.Add(myIcon);

        for (int i = 0; i < pushPin.Items().Count; i++)
        {
            myIcon.Location = pushPin.MyGeopoint(i);
        }
    }
}

pushpin.cs:

internal class PushPin

{

    private ObservableCollection<Geopoint> items;

    public PushPin()
    {
        items = new ObservableCollection<Geopoint>();
    }

    public void AddPushPin(double latitude, double longitude)
    {
        items.Add(new Geopoint(new BasicGeoposition() { Latitude = latitude, Longitude = longitude }));
    }

    public Geopoint MyGeopoint(int i)
    {
        return items[i];
    }

    public ObservableCollection<Geopoint> Items()
    {
        return items;
    } 
}

Я думаю, что моя проблема в том, что я постоянно переопределяю созданный ранее мэпикон, но как мне обойти это? Любая точка в правильном направлении будет оценена! Пс. Я пытался с привязкой к ObservableCollection, но мы недостаточно осведомлены о привязке данных, чтобы я мог в этом разобраться.


person Evilunclebill    schedule 06.11.2015    source источник
comment
Я ответил на связанный вопрос на днях, в котором описывается, как привязать ObservableCollection<Pushpin> к элементу управления Map. Если это поможет.   -  person Mike Eason    schedule 06.11.2015
comment
@MikeEason Ваш ответ намного сложнее, чем требуется.   -  person MajkeloDev    schedule 06.11.2015
comment
@MikeEason Нет ли более простого способа просто добавить их программно? Вместо того, чтобы добавлять их по щелчку.   -  person Evilunclebill    schedule 06.11.2015
comment
Конечно, просто используйте метод .Add на своем ObservableCollection, как обычно. Добавленный элемент также будет добавлен на карту по мере привязки.   -  person Mike Eason    schedule 06.11.2015
comment
Я переместил свой цикл for так, чтобы он содержал всю карту, а не только местоположение. Логически это сработало, так как я сделал не одну иконку карты с двумя координатами, а две по отдельности. Спасибо за вашу помощь.   -  person Evilunclebill    schedule 06.11.2015
comment
Вижу, ты нашел ответ. Я не удаляю свой, так как это может помочь некоторым людям, которые борются с Bing Maps и MVVM.   -  person MajkeloDev    schedule 06.11.2015


Ответы (2)


Некоторое время назад у меня была эта проблема, и я нашел решение (с MVVM), еще более мощное, поскольку оно не ограничивает вас добавлением только кнопок.

Сначала создайте ObservableCollection из UiElements (не забудьте реализовать измененное свойство).

    private ObservableCollection<UIElement> mapElements = new ObservableCollection<UIElement>();
    public ObservableCollection<UIElement> MapElements
    {
        get
        {
            return mapElements;
        }
        set
        {
            mapElements = value;
            OnPropertyChanged("MapElements");
        }
    }

Затем создайте MapItemsControl внутри вашей карты и привяжите его ItemsSource к коллекции, которую вы только что создали.

<Maps:Map [...]>
    <Maps:MapItemsControl ItemsSource="{Binding MapElements}"/>
</Maps:Map>

Наконец, единственное, что вам нужно сделать, это добавить свои кнопки в коллекцию MapElements.

public void AddPushpinToTheMap(double longitude, double latitude)
{
    var pin = new Pushpin();
    pin.Location = new Location(latitude, longitude);
    MapElements.Add(pin);
}

Вот и все, булавка будет видна на карте.

person MajkeloDev    schedule 06.11.2015

Проблема оказалась проще, чем я себе представлял. Я был манекеном.

    public void AddIcon()
    {

        for (int i = 0; i < pushPin.Items().Count; i++)
        {
            MapIcon myIcon = new MapIcon();
            myIcon.NormalizedAnchorPoint = new Point(0.5, 1.0);
            myIcon.Title = "Apartment here";
            MyMap.MapElements.Add(myIcon);
            myIcon.Location = pushPin.MyGeopoint(i);
        }
    }
person Evilunclebill    schedule 06.11.2015