2013-09-02 8 views
6

Ho un controllo Mappa con MapsItemControl in esso:"Gli articoli devono essere vuoto prima di usare elementi di origine" durante l'aggiornamento MapItemsControl.ItemsSource

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

Io popolo della MapItemsControl nel codice seguente modo:

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

Questo funziona correttamente quando si aggiungono elementi alla mappa per la prima volta. Ma se voglio aggiornarlo con una nuova collezione voce laghetti L'alimento, ottengo il seguente errore nel itemCollection.ItemsSource = myItemCollection; linea:

Items must be empty before using Items Source

Così, ho provato con l'aggiunta di una riga al mio codice, al fine di rimuovere gli elementi prima di impostare la fonte di nuovo, senza successo:

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

Ora ho l'eccezione folowing in linea itemCollection.Items.Clear();:

Collection is in non writeable mode

Come posso aggiornare le voci del MapItemsControl?

+0

State aggiungendo elementi manualmente ad un certo punto? Usando 'itemCollection.Add (...)'? –

+0

@KooKiz no, non lo sono. – anderZubi

risposta

-1

Urmm .. Che ne dite di

itemCollection.Items = itemCollection.Items.Clear(); 
0

Supponendo che si sta continuando ad utilizzare la stessa myItemCollection per contenere le informazioni di corrente (se si sta binging una fonte, questo dovrebbe probabilmente essere il caso), allora si non dovrebbe essere necessario ricollegarsi. Invece, devi lanciare eventi PropertyChanged, in modo che il componente saprà aggiornarsi con i contenuti correnti della sorgente. Vedere lo Binding Sources tutorial e lo How to: Implement Property Change Notification di Microsoft per ulteriori informazioni.

+0

Purtroppo sembra che i collegamenti non possano essere utilizzati con MaptItemsControl.ItemsSource. L'uso del binding renderebbe molto più facile raggiungere il mio obiettivo. Tuttavia, gestire le mappe nel WP8 sembra più difficile rispetto al WP7. – anderZubi

+0

In base alla pagina MapItemsControl (http://msdn.microsoft.com/en-us/library/jj620947.aspx), è per l'associazione dei dati. Lo fa come classe figlio di ItemsControl (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemssource.aspx). – aring

+1

Questo è per Bing Maps nell'app di Windows Store. Ha funzionato anche con Bing Maps in WP7, ma non con MapItemsControl di Windows Phone Toolkit e Nokia Maps in WP8 – anderZubi

0

Prova ad usare la proprietà DataContext. Inoltre, non è necessario scrivere Clear durante l'utilizzo. Semplicemente provare questo:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault(); 
itemCollection.DataContext = myItemCollection; 
+2

itemCollection non ha una proprietà DataContext. – anderZubi

+0

Quindi cosa sta per scrivere 'itemCollection.ItemsSource = null; itemCollection.ItemsSource = myItemCollection; '? Inoltre: http: // StackOverflow.it/questions/14525618/phone-maps-items-collection-must-be-empty-before-using-itemssource –

+2

Ottengo lo stesso errore: * Gli articoli devono essere vuoti prima di usare gli articoli Source * – anderZubi

2

Sembra che I prodotti che viene bloccato se si associa con ItemsSource ... ma se si aggiunge ogni elemento con Item.Add (articolo), funziona benissimo. Così che ho finito per fare era questa:

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

Spero che questo aiuti :)

+1

Questo ha funzionato come un fascino per me ! L'unico problema che vedo ora è quando si rimuovono e si aggiungono nuovamente i simboli, tendono a "saltare" visivamente alcuni pixel quando appaiono per la prima volta. –

Problemi correlati