0

在 UWP 应用程序(Windows 10)中,我有一个MapControl,我正在使用MapItemsControl它来为该地图提供覆盖。的ItemsSource那个MapItemsControl(它是一个ObservableCollection)通过xaml绑定,但只在一个方向上工作:

将项目添加到该集合中工作正常,并且这些项目也显示在其中MapControl。将项目删除到该集合也有效,但似乎仅在该集合中 - my 上的视觉表示MapControl不会对删除元素做出反应。这可能会导致将项目无限添加到该地图中,而不会删除任何项目。

ObservableCollection经常安静地更新(通过)并在该MapControl.ZoomLevelChanged-Event过程中被清除和重新填充 - 这可能是一个问题吗?

通过 xaml 绑定如下所示:

 <maps:MapControl
    HorizontalAlignment="Stretch"
    VerticalAlignment="Stretch"
    [...]>
    <maps:MapItemsControl ItemsSource="{x:Bind Path=MapDirectionOverlay, Mode=OneWay}"/>
</maps:MapControl>

有什么建议么?

4

2 回答 2

1

将项目删除到该集合也可以,但似乎仅在该集合中 - 我的 MapControl 上的视觉表示不会对删除元素做出反应。

ObservableCollection表示一个动态数据集合,它在添加、删除项目或刷新整个列表时提供通知。因此,如果您添加或删除项目,则ItemsSouce应该更新集合和绑定。

由于我不知道您如何删除项目,因此通过使用RemoveRemoveAtRemoveItemObeservableCollection等删除方法,它们应该可以很好地删除项目以及删除地图中的对应项目。

但是,如果您只是将 to 设置ObeservableCollectionnull不会对ItemsSouce.In 产生影响。在这种情况下,您需要手动将 of 设置ItemsSouceMapItemsControlnull 但不建议这样做。

于 2016-12-23T08:42:29.547 回答
0

由于使用Clear-Method没有成功,我尝试使用其他的删除方法,ObservableCollection最终奏效了。

所以最后,这是我正在使用的解决方法:

private new void Clear()
{
    for (int i = this.Count - 1; i >= 0; i--)
    {
        this.RemoveAt(i);
    }
}

毕竟我仍然不明白,为什么一个简单的Clear行不通,因为它仍然应该引发一个NotifyCollectionChangedAction. (如我错了请纠正我)

于 2017-01-04T08:15:36.007 回答