Я знаю, что это поздний ответ, но я работал над аналогичным проектом и использовал похожий подход, поэтому я решил поделиться. Это мой первый пост, настолько открытый для меня, но мой подход, который я использовал, был:
Создайте две глобальные двойные переменные для хранения координат X, Y:
double mapLocX;
double mapLocY;
Установите эти глобальные двойники в положение точки вашей метки в событии DragStarted:
Point point = myMap.LocationToViewportPoint(myPin.Location);
mapLocX = point.X;
mapLocY = point.Y;
В вашем событии dragDelta измените эти переменные так же, как и свою метку:
mapLocX += e.HorizontalChange;
mapLocY += e.VerticalChange;
Теперь в DragCompleted создайте новую точку, которая принимает наши отрендеренные глобальные переменные, и сопоставьте их с геокоординатой, и вот кикер; Удалите нашу старую булавку из коллекции ObservableCollection (Mine is Locations) и добавьте новую булавку для нашей новой координаты:
Point point = new Point(mapLocX, mapLocY);
GeoCoordinate geoCoord = new GeoCoordinate();
geoCoord = myMap.ViewportPointToLocation(point);
Locations.Remove(myPin.Location);
Locations.Add(geoCoord);
Надеюсь, это поможет