Я сталкивался с этим, работая над своим собственным решением, и я был так счастлив видеть, что оно работает именно так, как вы описали, я решил опубликовать его. Отметим, что я также использую шаблон привязки 2Way MVVM, и он работает безупречно. Вам нужно 2 вещи:
1) Этот метод расширения помогает найти MapLayer, который является родительским для вывода во время выполнения:
public static T FindVisualParent<T>(this DependencyObject obj)
where T : DependencyObject
{
DependencyObject parent = VisualTreeHelper.GetParent(obj);
while (parent != null)
{
T typed = parent as T;
if (typed != null)
{
return typed;
}
parent = VisualTreeHelper.GetParent(parent);
}
return null;
}
2) В обработчике события «Перетаскивание» на канцелярской кнопке вызовите этот метод расширения для ссылки на хост MapLayer, а затем запустите самый красивый метод InvalidateArrange (из UIElement) следующим образом:
void ParentMap_MouseMove(object sender, MouseEventArgs e)
{
var map = sender as Microsoft.Maps.MapControl.Map;
var parentLayer = this.FindVisualParent<MapLayer>();
if (this.isDragging)
{
var mouseMapPosition = e.GetPosition(map);
var mouseGeocode = map.ViewportPointToLocation(mouseMapPosition);
this.Location = mouseGeocode;
parentLayer.InvalidateArrange();
}
}
Это должно асинхронно выполнить визуальное обновление и дать вам хорошее поведение при перемещении по булавке. НТН