2011-02-03 11 views
5

voglio DataBind ObservableCollection ad un contronl pivot in WP7 in modo che ogni oggetto nella mia ObservableCollection diventa un PivotItem. Questo è il codice che uso:Databinding PivotItems a ObservableCollection su WP7

<controls:Pivot x:Name="MainPivot" ItemsSource="{Binding Persons}"> 
     <controls:Pivot.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding FullName}"/> 
      </DataTemplate> 
     </controls:Pivot.HeaderTemplate> 
     <controls:Pivot.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding FirstName}"/> 
        <TextBlock Text="{Binding LastName}"/> 
        <TextBlock Text="{Binding HomeTown}"/> 
       </StackPanel> 
      </DataTemplate> 
     </controls:Pivot.ItemTemplate> 
    </controls:Pivot> 

Questo funziona e con gli elementi tre in mia ObservableCollection ottengo tre PivotItems. Ma quando tutto viene caricato, l'associazione all'interno del DataTemplate non verrà aggiornata. È solo quando passo al prossimo PivotItem che vengono caricati FirstName, LastName e HomeTown.

Perché è quello? Cosa mi manca?

Grazie

risposta

0

Dopo aver fatto un semplice test non riesco a riprodurre questo comportamento. Ho inserito un breakpoint nel blocco get dell'equivalente di FirstName con due elementi nel mio ObservableCollection ottengo due colpi.

Come hai fatto rilevare che non è vincolato? Non è possibile visualizzare il contenuto di "pivotitems" successivo, quindi come?

+0

Hi Jonas. Sono le "prime" proprietà del pivotitem che non riesco a vedere. Quando faccio scorrere il "prossimo" che uno si presenta e così fa il "primo" quando faccio scorrere indietro. –

+0

Quando instradare ObservableCollection e quando si aggiungono elementi in esso? Il mio test è stato creato e aggiunto gli elementi nel costruttore PRIMA di impostare DataContext –

+0

Ma dopo aver provato a impostare DataContext nell'evento Loaded funziona ancora per me anche se –

0

Suona come se ci fosse qualche problema con l'ordine di caricamento - oppure con il codice di notifica.

Verificare che si sta correttamente generare l'evento PropertyChanged quando si impostano le proprietà su ciascuno dei vostri membri nome, cognome e città natale.

1

ho avuto lo stesso problema, ma la soluzione con l'impostazione SelectedIndex = 1 non mi andava.

ho trovato l'altra soluzione: quando si aggiungere l'articolo alla vostra collezione Persone si deve prima creare un elemento di temperatura e solo quando si compila tutti i dati che aggiungere alla vostra collezione persone.

Person tempPers = new Person() { FullName = "Abduvaliev Edem", FirstName = "Edem", LastName = "Abduvaliev", HomeTown = "Sevastopol"}; 
Pesrons.Add(tempPers); 
0

Ecco come lo faccio. Il problema per me è che la raccolta viene aggiornata in modo asincrono in risposta a una chiamata al metodo web.

void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    _log.Debug("Page loaded."); 

    var vm = this.GetViewModel<TrendsViewModel>(); 

    if (!vm.IsInitialized) 
    { 
     vm.PivotItems.CollectionChanged += (origin, args) => 
     { 
      this.PivotControl.DataContext = null; 
      this.PivotControl.DataContext = vm; 
     }; 

     vm.Initialize(this); 
    } 
} 

La chiave è collegare un osservatore della raccolta alla quale gli elementi pivot vengono legati e dando il contesto dati una scossa quando aggiorna.