2015-11-06 95 views
0

我试图在Windows 10应用程序中添加多个图钉到bing地图。我面临的问题是,它只是最后一次添加的经纬度,长时间被添加。让我后我的代码:将多个图钉添加到bing地图

map.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; 
    } 
} 

我认为我的问题是我经常重写mapicon我以前创建,但我如何解决这个问题? 任何点在正确的方向将不胜感激! Ps。我已经尝试绑定到ObservableCollection,但我们还没有足够的关于数据绑定,我想出来。

+0

我回答了一个相关的问题[有一天](http://stackoverflow.com/questions/33501036/mvvm-add-points-to-a-map/33527056#33527056),它描述了如何绑定一个'ObservableCollection '到'Map'控件。如果有帮助。 –

+0

@MikeEason你的答案远远超出它的要求。 – MajkeloDev

+0

@MikeEason有没有更简单的方法来以编程方式添加它们?而不是必须点击添加它们。 – Evilunclebill

回答

0

这个问题比我想象的更简单。我是一个虚拟的tbh。

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

前段时间我遇到了这个问题,我发现了一个解决方案(使用MVVM),更加强大,因为它不限制您只添加图钉。

首先创建UiElements的ObservableCollection(不要忘记实现属性改变)。

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

这就是它的销会在地图上可见。

相关问题