必应地图 - 自动更新位置绑定的图钉

3
我正在使用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控件的问题。

有什么想法吗?


我遇到了同样的问题 :( 有什么可能会出错的想法吗? - themarcuz
6个回答

2
我在这里找到了Candritzky的解决方法:带有代码的解决方案链接
基本上你需要将ItemsPanel更改为自定义面板,从而公开新的AttachedProperty。 对我来说它可行 :)

2

不要像这样更新位置:

_pushPin.Location.Latitude = xyz...

而是创建一个新的对象:

_pushPin.Location = new Location(_location);

否则BingMap最终会失去更新的跟踪。

1

通过刷新视图

map.SetView(map.BoundingRectangle); 

工作正常


1

刷新视图对我没有起作用。最简单的解决方案是不重新创建图钉,而是:

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

or

_pushPin.Location = new Location(_location);

希望这能帮到你。

0
我在这里找到了一些东西 here:看起来微软的 Bing 地图控件存在一个 bug。 我甚至尝试了建议的解决方法,但对我没用。

是的,我确实考虑过更改视图,但不完全是这种方式,但我从未尝试过。我最终做的是“简单地”删除并重新添加带有引脚的层。我知道听起来像是一个非常繁重的操作,但从结果来看,似乎并不是这样! - abp
相反,我尝试简单地删除旧图钉并使用新位置重新创建一个新的图钉。我不知道哪种操作更重... - themarcuz
或者更好的方法是,我从集合中删除图钉,更改位置,然后重新插入更新后的图钉:集合是可观察的,因此UI会拦截此更改并相应地更新自身。仍然不知道哪个操作更重... - themarcuz

0
如果有人想知道,我的解决方案是创建自己的类ObjectCollection并从ObservableCollection<Object>继承。添加一个方法ObjectCollection.Refresh(),如下所示:
public void Refresh()
{
    base.OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
}

在循环中重新填充集合完成后,请调用此方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接