c# - 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
的不会更新。
所以我有两个问题:
- 您是否在我的 XAML 中看到任何可以证明第一项未显示这一事实的错误?
- 为什么 MapPolylines 没有更新?我在想,由于某种原因,当我添加/删除项目时,
Devices
我会正确发出 PropertyChanged 事件,但是当我编辑特定项目时不会发生同样的情况。如果这是正确的,我应该发出什么信号以及如何发出信号,以便 UI 按预期工作?
更新
通过遵循 mm8 的建议,我实现INotifyPropertyChanged
了它,它的工作原理更多:形状没有改变,但如果我缩小和缩小或拖动地图,我可以看到它发生了变化。我可以自动强制重绘形状吗?我也删除了Mode=TwoWay
,因为没有必要。我检查了一堆写行,集合的计数总是 n+1,其中 n 是我要添加的项目数,+1 是由于假项目。
解决方案
推荐阅读
- visual-studio-code - 在团队之间推广 Visual Studio 代码格式,以避免由于自动格式化而导致的合并冲突
- symfony - Symfony - 如何以 DRY 方式转换这两个功能?
- apache-spark - 如何使用 taskContext 获取 Spark 阶段中的总分区数或任务数?
- conflict - 在 CLIPS 中,我必须使用冲突解决策略,有人可以帮我添加策略吗?
- asp.net - 从 IServiceCollection 获取服务到属性类的正确方法
- c# - dotnet publish 将 spa 文件复制到错误的输出目录
- javascript - 自动将选择扩展到一行块
- javascript - JS 对 Firefox 和 Chrome 中的不同行为进行排序
- c# - 拒绝访问路径“/data/user/0/com.companyname.hidden_wiretapping/files”。
- mysql - JSON_ARRAY() 创建单个元素数组而不是多个