首页 > 解决方案 > bing 地图不更新绑定的形状

问题描述

我在 XAML 中定义了一个具有 bing 地图元素的窗口。在不复制整个窗口的情况下,XAML 的相关部分是

<m:Map x:Name="myMap" CredentialsProvider="BLABLA" Mode="Road">
    <m:MapItemsControl ItemsSource="{Binding Devices, Mode=TwoWay}">
        <m:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <m:MapPolyline Locations="{Binding Locations, Mode=TwoWay}"
                               Fill="Green" Stroke="Blue"
                               StrokeThickness="4" Opacity="1"/>
            </DataTemplate>
        </m:MapItemsControl.ItemTemplate>
    </m:MapItemsControl>
</m:Map>

Devices是一个ObservableCollection<PushPinSet>,其中PushPinSet定义如下

public class PushPinSet
{
    public DateTime LastSeen { get; set; }

    public LocationCollection Locations { get; set; }
}

当我创建ObservableCollection Devices(几乎)一切都很好:MapPolylines 是根据LocationCollection. 我说差不多,因为出于某种未知原因,它总是跳过第一项。我通过在集合的开头添加一个假项目来解决它。当我尝试LocationCollection在其中一项设备中创建一个新的以使形状变形时,相应MapPolyline的不会更新。

所以我有两个问题:

  1. 您是否在我的 XAML 中看到任何可以证明第一项未显示这一事实的错误?
  2. 为什么 MapPolylines 没有更新?我在想,由于某种原因,当我添加/删除项目时,Devices我会正确发出 PropertyChanged 事件,但是当我编辑特定项目时不会发生同样的情况。如果这是正确的,我应该发出什么信号以及如何发出信号,以便 UI 按预期工作?

更新

通过遵循 mm8 的建议,我实现INotifyPropertyChanged了它,它的工作原理更多:形状没有改变,但如果我缩小和缩小或拖动地图,我可以看到它发生了变化。我可以自动强制重绘形状吗?我也删除了Mode=TwoWay,因为没有必要。我检查了一堆写行,集合的计数总是 n+1,其中 n 是我要添加的项目数,+1 是由于假项目。

标签: c#wpfxamldata-bindingbing-maps

解决方案


推荐阅读