2010-11-06 32 views
13

In un Phone 7 pagina di Windows Ho il seguente comando:controllo DataBound pivot non sta creando la prima PivotItem

<controls:Pivot x:Name="Pivoter" Title="{Binding Name}" 
     TitleTemplate="{StaticResource PivotTitleTemplate}" 
     HeaderTemplate="{StaticResource PivotHeaderTemplate}" 
     ItemsSource="{Binding Items}" 
     ItemTemplate="{StaticResource DisplayItemDataTemplate}"> 
</controls:Pivot > 

con questo DataTemplate:

<DataTemplate x:Key="DisplayItemDataTemplate">  
    <Image Grid.Column="0" Stretch="Uniform" 
     Source="{Binding LargeImage, Converter={StaticResource UriBitmapConverter}}"/> 
    <StackPanel Grid.Column="1" Orientation="Vertical"> 
     <HyperlinkButton NavigateUri="{Binding Uri}" Content="{Binding Uri}"/> 
    </StackPanel>  
</DataTemplate> 

Il ItemsSource è un ObservableCollection. Quando viene visualizzata la pagina, crea tutto il PivotItems ma il primo elemento non viene creato a meno che non lo scorri in avanti e lo torni indietro. Ha una voce nell'elenco di scorrimento ma non il controllo PivotItem.

Se inserisco un punto di interruzione nell'evento LoadingPivotItem di Controllo pivot, non viene chiamato quando viene visualizzato per primo il pivot, ma viene colpito solo quando si scorre e si torna indietro al primo elemento.

Qualcuno ha visto un comportamento simile per il controllo Pivot e hanno un lavoro intorno? O sto facendo qualcosa in modo errato?

risposta

4

mi sono imbattuto in questo stesso problema.

Risulta DataContext per il perno deve essere impostato nel costruttore. Stavo impostando il mio DataContext nell'evento Page_Loaded e il primo elemento pivot non avrebbe generato l'evento Loading, come descritto. Legando semplicemente DataContext in precedenza, l'evento ha iniziato a funzionare.

Credo che sia un bug nel quadro, ma non ho fatto abbastanza per confermarlo.

3

Mi sono imbattuto in questo, e non ho potuto risolvere questo impostando il contesto dati nel costruttore, poiché i dati che stavano per essere visualizzati dipendevano dalle informazioni del NavigationService, quindi ho dovuto caricare i dati nel gestore di eventi page_loaded.

Ma impostando SelectedIndex pivot controlli per 1 nella pagina caricata-evento, magicamente cominciato a lavorare. Non è una soluzione ideale, ma in questo caso è stato un blocco che ho dovuto risolvere.

codice di esempio:

void ChannelOverview_Loaded(object sender, RoutedEventArgs e) 
    { 
     string channelSystemName; 
     if(this.NavigationContext.QueryString.TryGetValue("channelSystemName", out channelSystemName)) 
     { 
      this.viewModel.LoadData(this.Dispatcher, channelSystemName); 
      //Set the SelectedIndex to one, 
      //otherwise the pivot-view won't render the first item. 
      this.overviewPivot.SelectedIndex = 1; 
     } 
     else 
     { 
      MessageBox.Show("Kanalen hade ett felaktigt Id "); 
     } 
    } 
+0

ho aggiunto una linea direttamente dopo il 'this.overviewPivot.SelectedIndex = 1;': 'this.overviewPivot.SelectedIndex = 0;' che funziona in tutto il bug troppo senza essere costretti a codificare il costruttore. –

+0

L'unico problema che ho ora è quando il numero di PivotItem è uno perché non potrò passare a un altro PivotItem. L'aggiunta di un dummy non è consentita quando si utilizza l'associazione per creare i PivotItem. –

+0

Ho trovato una soluzione funzionante, quindi ho aggiunto una risposta. –

0

This blogpost risolto il mio problema.

Il mio problema con le altre soluzioni proposte era che non ero in grado di utilizzare il costruttore per impostare il DataContext e che, a volte, c'era solo un PivotItem così ho potuto passare avanti e indietro per caricare il contenuto.

La soluzione è estremamente semplice: prima di aggiornare la raccolta a cui è associato Pivot, imposta DataContext su null. Quindi aggiorna la raccolta e successivamente imposta DataContext nella raccolta.

1

potrebbe essere un po 'in ritardo, ma si potrebbe aiutare qualcuno. Come documentato, SelectedIndex del pivot se 0 e un contesto di dati cambiano con il risultato che SelectedIndex è di nuovo 0, non aggiorna il primo elemento di rotazione e nessuno dei due chiama evento di caricamento dell'elemento di pivot. Tuttavia, in seguito ha funzionato anche quando avevo un controllo pivot associato ai dati. Si noti che pivotTypes.Items [0] restituisce l'oggetto associato ai dati e non l'elemento di rotazione.

pivotTypes.SelectedItem = pivotTypes.Items[ 0 ]; 
Problemi correlati