我正在使用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控件的问题。
有什么想法吗?
答案 0 :(得分:2)
请勿更新位置,如下所示:
<input>
而是创建一个新对象:
_pushPin.Location.Latitude = xyz...
否则_pushPin.Location = new Location(_location);
最终会以某种方式失去对更新的追踪
答案 1 :(得分:1)
刷新视图
map.SetView(map.BoundingRectangle);
作品
答案 2 :(得分:1)
刷新视图对我不起作用。而不是重新创建Pushpin,最简单的解决方案是:
_pushPin.Location = null;
_pushPin.Location = _location;
或
_pushPin.Location = new Location(_location);
希望这有帮助。
答案 3 :(得分:1)
我在这里找到了Candritzky的解决方法:Solution link with code
基本上,您必须将ItemsPanel
更改为公开新AttachedProperty
的自定义广告。对我来说它有效:)
答案 4 :(得分:0)
我发现了一些here:好像Bing的地图控件中存在一个错误。 我甚至尝试了建议的解决方法,但它不适合我
答案 5 :(得分:0)
如果有人想知道,我的解决方案是创建自己的课程ObjectCollection
并继承自ObservableCollection<Object>
。像这样添加方法ObjectCollection.Refresh():
public void Refresh()
{
base.OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
}
并在循环中重新填充集合后调用此方法。