我有一个带有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;
首次向地图添加项目时,此功能正常。但是,如果我想使用新的soruce项目集合更新它,我会在itemCollection.ItemsSource = myItemCollection;
行中收到以下错误:
在使用项目来源
之前,项目必须为空
所以,我尝试在代码中添加一行,以便在再次设置源代码之前删除项目,但没有成功:
var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.Items.Clear();
itemCollection.ItemsSource = myItemCollection;
现在我在行itemCollection.Items.Clear();
中得到了以下例外:
收藏处于不可写模式
如何更新MapItemsControl
?
答案 0 :(得分: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);
}
希望这会有所帮助:)
答案 1 :(得分:0)
假设您继续使用相同的myItemCollection来保存当前信息(如果您正在查找源代码,可能就是这种情况),那么您不需要重新绑定。相反,您需要抛出PropertyChanged事件,以便组件知道要使用源的当前内容进行更新。有关详情,请参阅Microsoft的Binding Sources tutorial和How to: Implement Property Change Notification。
答案 2 :(得分:0)
尝试使用DataContext
属性。而afaik你在使用它时不需要写清楚。试试这个:
var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault();
itemCollection.DataContext = myItemCollection;
答案 3 :(得分:-1)
Urmm ..怎么样
itemCollection.Items = itemCollection.Items.Clear();