6

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;

これは、アイテムを初めてマップに追加するときに正しく機能します。しかし、新しいソース アイテム コレクションで更新したい場合は、次のエラーが表示され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

ItemsSourceでバインドするとItemsがロックされてしまうようですが…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プロパティを使用してみてください。また、使用中に 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 に答える