6

我有一个带有 MapsItemControl 的地图控件:

<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;

第一次将项目添加到地图时,这可以正常工作。但是,如果我想用新的 soruce 项目集合对其进行更新,则会出现以下错误itemCollection.ItemsSource = myItemCollection;

在使用项目源之前项目必须为空

因此,我尝试在代码中添加一行,以便在再次设置源之前删除项目,但没有成功:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.Items.Clear();
itemCollection.ItemsSource = myItemCollection;

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

集合处于不可写模式

如何更新 中的项目MapItemsControl

4

4 回答 4

2

如果您将 Items 与 ItemsSource 绑定,它似乎会被锁定......但是如果您使用 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);
}

希望这可以帮助 :)

于 2013-12-11T13:30:21.277 回答
0

尝试使用DataContext属性。而且 afaik 您在使用时不需要编写 Clear 。试试这个:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.DataContext = myItemCollection;
于 2013-09-02T14:08:36.573 回答
0

假设您继续使用相同的 myItemCollection 来保存您当前的信息(如果您正在搜索来源,这可能就是这种情况),那么您不需要重新绑定。相反,您需要抛出 PropertyChanged 事件,以便组件知道使用源的当前内容进行更新。有关更多信息,请参阅绑定源教程如何:实施Microsoft 的属性更改通知。

于 2013-09-02T14:04:57.060 回答
-1

嗯..怎么样

itemCollection.Items = itemCollection.Items.Clear();
于 2013-09-02T13:56:32.697 回答