我有一个带有MapsItemControl的Map控件:

<maps:Map x:Name="MyMap">
    <maptk:MapExtensions.Children>
        <maptk:MapItemsControl>
            <maptk:MapItemsControl.ItemTemplate>
                <DataTemplate>
                    . . .
                </DataTemplate>
            </maptk:MapItemsControl.ItemTemplate>
        </maptk:MapItemsControl>
    </maptk:MapExtensions.Children>
</maps:Map>

我通过以下方式在代码中填充MapItemsControl:
var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.ItemsSource = myItemCollection;

首次将项目添加到 map 时,此方法可以正常工作。但是,如果我想使用新的soruce项集合进行更新,则在itemCollection.ItemsSource = myItemCollection;行中会收到以下错误:



因此,我尝试在代码中添加一行,以便在再次设置源之前删除项目,但没有成功:
var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.Items.Clear();
itemCollection.ItemsSource = myItemCollection;

现在,我在itemCollection.Items.Clear();行中得到以下异常:



如何更新MapItemsControl中的项目?

最佳答案

如果将其与ItemsSource绑定(bind),则似乎被锁定了,但是如果使用Item.Add(item)添加每个项目,则可以正常工作。
所以我最终要做的是:

var itemCollection = MapExtensions.GetChildren((Map)MyMap)
                                  .OfType<MapItemsControl>().FirstOrDefault();
if(itemCollection != null && itemCollection.Items.Count >0)
{
    itemCollection.Items.Clear();
}
foreach(var item in YourPushpinCollection)
{
    itemCollection.Items.Add(item);
}

希望这可以帮助 :)

关于c# - 更新MapItemsControl.ItemsSource时的"Items must be empty before using Items Source",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18574819/

10-11 02:07