Карты Bing - автоматическое обновление привязки местоположения кнопок - PullRequest
3 голосов
/ 18 ноября 2010

Я использую элемент управления Bing Maps для отображения серии пользовательских кнопок, представляющих объекты, которые постоянно перемещаются и меняют состояние.

При использовании привязки данных различные свойства объектов обновляются, как и должно, но по некоторым причинам это не относится к их расположению.

У меня есть карта, привязанная к ObservableCollection как таковая:

<UserControl.Resources>    
    <DataTemplate x:Key="PushpinTemplate">
        <v:CustomPushpin />
    </DataTemplate>
</UserControl.Resources>

...

<m:Map Name="map">
   <m:MapItemsControl ItemTemplate="{StaticResource PushpinTemplate}" ItemsSource="{Binding Objects}" />
</m:Map>

... и в CustomPushpin:

<UserControl
...    
   m:MapLayer.Position="{Binding Location}" m:MapLayer.PositionOrigin="BottomCenter"
   mc:Ignorable="d" d:DesignHeight="126" d:DesignWidth="85">

Как и все другие свойства, расположение отдельных объектов реализовано с использованием INotifyPropertyChanged.

private Location _location;
public Location Location
{
   get { return _location; }
   set { _location = value; OnPropertyChanged("Location"); }
}

Когда карта движется, из-за панорамирования или масштабирования, объекты перемещаются, но другие не изменяются.

Я не могу понять, что я делаю здесь что-то не так или это проблема с элементом управления Bing Maps.

Есть мысли?

Ответы [ 6 ]

2 голосов
/ 25 февраля 2017

Не обновлять местоположение, как это:

_pushPin.Location.Latitude = xyz...

вместо этого создайте новый объект:

_pushPin.Location = new Location(_location);

в противном случае BingMap каким-то образом потеряет отслеживание обновления в конечном итоге

1 голос
/ 28 мая 2013

Я нашел обходной путь Candritzky здесь: Ссылка на решение с кодом

В основном вам придется изменить ItemsPanel на пользовательский, который выставляет новый AttachedProperty.У меня это работает :) 1007 *

1 голос
/ 08 мая 2013

Обновление вида не работает для меня. Вместо воссоздания Pushpin самое простое решение было:

_pushPin.Location = null;
_pushPin.Location = _location;

или

_pushPin.Location = new Location(_location);

Надеюсь, это поможет.

1 голос
/ 03 июля 2012

освежающий вид по

map.SetView(map.BoundingRectangle); 

работам

0 голосов
/ 30 января 2012

На случай, если кому-то интересно, я решил создать свой собственный класс ObjectCollection и наследовать от ObservableCollection<Object>.Добавьте метод ObjectCollection.Refresh () примерно так:

public void Refresh()
{
    base.OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
}

и вызовите этот метод после того, как я завершу повторное заполнение коллекции в цикле.

0 голосов
/ 07 марта 2011

Я нашел что-то здесь : похоже, есть ошибка в Bing's Map Control от Microsoft. Я даже попробовал предложенный обходной путь, но он не работает для меня

...