2016-12-22 10 views
0

В UWP-приложении (Windows 10) у меня есть MapControl, и я использую MapItemsControl для доставки наложения для этой карты. ItemsSource этого MapItemsControl (который является ObservableCollection) связан с помощью XAML, но работает только в одном направлении:MapItemsControl не отражает удаление соответствующих ItemsSource

Добавление элементов в этой коллекции работает нормально, и эти элементы показаны в этом MapControl тоже. Снятие предметов в эту коллекцию тоже работает, но, похоже, только внутри этой коллекции - визуальное представление на моем MapControl не реагирует на удаление элементов. Это может привести к бесконечному добавлению элементов в эту карту, в то время как элемент никогда не удаляется.

ObservableCollection периодически обновляется тихо (через MapControl.ZoomLevelChanged-Event) и получает очищенный &, заселенный в этом процессе - может быть, это проблема?

Связывание с помощью XAML выглядит следующим образом:

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

Любые предложения?

ответ

0

Так как использование Clear-Method не помогло, я попытался использовать другие методы удаления ObservableCollection и со временем это сработало.

Таким образом, в конце концов, это обходной путь, я использую:

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

В конце концов я все еще не понимаю, почему простой Clear не будет работать, так как он все еще должен поднять NotifyCollectionChangedAction. (Исправьте меня, если я ошибаюсь)

1

Удаление элементов в эту коллекцию также работает, но, похоже, только внутри этой коллекции - визуальное представление на моем MapControl не реагирует на удаление элементов.

ObservableCollection представляет собой динамический сбор данных, который предоставляет уведомления, когда элементы становятся добавленными, удалены или когда обновляется весь список. Поэтому, если вы добавляете или удаляете элементы, сбор и ItemsSouce привязки должны быть отражены в обновленном виде.

Поскольку я не знаю, как вы удаляете деталь, с помощью методов удаления ObeservableCollection, таких как Remove, RemoveAt и RemoveItem, они должны хорошо работать с удалением элементов, а также удаления корреспондентского пункта на карте.

Но если вы просто установите ObeservableCollection в null не будет принимать никакого влияния на ItemsSouce .В этом случае вам необходимо установить ItemsSouce из MapItemsControl обнулить вручную, но которые не рекомендуется.

+0

Я использую [Очистить] (https://msdn.microsoft.com/en-us/library/ms132405 (v = vs.110) .aspx) для удаления элементов из моего ObeservableCollection - все же визуальное представление этих элементов просто добавляет новые элементы, но не удаляет их ... –