2014-07-22 3 views
0

Я только что создал новый проект с использованием Bing map control (по умолчанию в панели инструментов). И я использую следующий метод, чтобы создать новую канцелярскую кнопкуУдалить добавленный pushpin Windows Phone 8

void DrawMyLocationOverLay() 
{ 
    MapLayer layer1 = new MapLayer(); 
    Pushpin pushpin1 = new Pushpin(); 
    pushpin1.GeoCoordinate = myGeoCoordinate; 
    pushpin1.Tag = "myLocation"; 
    pushpin1.Content = "My car"; 
    MapOverlay overlay1 = new MapOverlay(); 
    overlay1.Content = pushpin1; 
    overlay1.GeoCoordinate = myGeoCoordinate; 
    layer1.Add(overlay1); 
    MyMap.Layers.Add(layer1); 

} 

Ofcourse, это работает.

И теперь, я использую следующие методы обновления булавки, если расположение изменен

private void GetCoordinate() 
{ 
    var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High) 
    { 
     MovementThreshold = 2 
    }; 

    watcher.PositionChanged += this.watcher_PositionChanged; 
    watcher.Start(); 
} 

private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
{ 
    myGeoCoordinate = new GeoCoordinate(e.Position.Location.Latitude, 
             e.Position.Location.Longitude); 

    DrawMyLocationOverLay(); 
    // Problem here 

} 

Это создаст новую булавку, а не удалить канцелярскую созданную ранее (булавку, созданную в первом методе)

есть идеи ?

ответ

0

Похоже, вы создаете совершенно новый MapLayer, Pushpin и MapOverlay каждый раз, когда вы называете вашу DrawMyLocationOverLay функцией. Не правда ли, просто хотите переместить только Pushpin (или, может быть, только MapOverlay, я не могу сказать)?

В этом случае, когда вы их создаете, вы храните их в переменной-члене. Затем в вашем обработчике watcher_PositionChanged вы должны обновить их (а не создавать новые).

Что-то вроде:

private MapLayer _MapLayer; 
private Pushpin _Pushpin; 
private MapOverlay _MapOverlay; 

void InitialDraw() 
{ 
    MapLayer _MapLayer = new MapLayer(); 
    Pushpin _Pushpin = new Pushpin(); 
    _Pushpin.GeoCoordinate = myGeoCoordinate; 
    _Pushpin.Tag = "myLocation"; 
    _Pushpin.Content = "My car"; 
    MapOverlay _MapOverlay = new MapOverlay(); 
    _MapOverlay.Content = _Pushpin; 
    _MapOverlay.GeoCoordinate = myGeoCoordinate; 
    _MapLayer.Add(_MapOverlay); 
    MyMap.Layers.Add(_MapLayer); 
} 

void DrawMyLocationOverLay() 
{ 
    _Pushpin.GeoCoordinate = myGeoCoordinate; 
    _MapOverlay.GeoCoordinate = myGeoCoordinate; 
} 
+0

вы можете построить базу кода на мой код? Я просто хочу обновить свой Pushpin, когда изменилось местоположение созданной pushpin – user2165201

+0

Мое редактирование должно начаться. StackOverflow не является сайтом, чтобы кто-то написал вам код. Но это должно отправить вас в правильном направлении. – Tim

+0

Хорошо, я понял :) Большое вам спасибо! – user2165201