MapItemsControl不反映删除相应的ItemsSource

时间:2016-12-22 15:53:43

标签: binding uwp observable itemssource uwp-maps

在UWP-App(Windows 10)中,我有一个MapControl我正在使用MapItemsControl为该地图提供叠加层。 ItemsSource MapItemsControl的{​​{1}}(ObservableCollection)通过xaml绑定,但只在一个方向上工作:

向该集合添加项目工作正常,这些项目也显示在MapControl中。 删除项目到该集合也是有效的,但似乎只在该集合中 - 我MapControl上的可视化表示对删除元素没有反应。这可能会导致无限次将项目添加到该地图中,而不会删除任何项目。

ObservableCollection经常安排更新(通过MapControl.ZoomLevelChanged-Event)并获得清除&在这个过程中重新填充 - 可能是个问题?

通过xaml绑定看起来像这样:

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

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

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

由于我不知道如何删除该项目,因此使用ObeservableCollectionRemoveRemoveAtObeservableCollection的删除方法,它们应该可以正常使用删除项目以及删除地图中的相应项目。

但是,如果您将null设置为ItemsSouce,则ItemsSouce将不会生效。在这种情况下,您需要设置AssetID mytable手动为空,但不建议使用。

答案 1 :(得分:0)

由于使用Clear-Method没有做到这一点,我尝试使用ObservableCollection的其他删除方法,最终有效。

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

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

毕竟我还没有得到,为什么一个简单的Clear不起作用,因为它仍然应该提出NotifyCollectionChangedAction。 (如果我错了,请纠正我)