2011-06-16 3 views
0

J'ai un modèle d'élément de pivot qui comprend une zone de listeWP7 - l'accès à l'élément sélectionné dans ListBox lorsque ListBox est dans un itemtemplate

<controls:Pivot x:Name="MainPivot" ItemsSource="{Binding PivotItemHeaders}" Title="CLASS TIMETABLE" > 
     <controls:Pivot.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Description}"/> 
      </DataTemplate> 
     </controls:Pivot.HeaderTemplate> 
     <controls:Pivot.ItemTemplate> 
      <DataTemplate> 
       <ListBox x:Name="Events" ItemsSource="{Binding allEventItems}" ItemTemplate="{StaticResource EventDisplay2}"/> 
      </DataTemplate> 
     </controls:Pivot.ItemTemplate> 
    </controls:Pivot> 

Dans le code derrière je veux accéder à la selectedItem de cette zone de liste, mais je ne peux pas ' get » à la zone de liste en tant que telle parce ity (probablement) dans le modèle

-à-dire

this.NavigationService.Navigate(new Uri("/View/EventEdit.xaml?selectedEvent=" + Events.SelectedItem, UriKind.Relative)); 

l'événement est listbox ne pas être reconnu.

Assuminh je peux passer obtenir l'objet et le faire passer à travers comme paramètre, quel code puis-je utiliser pour le récupérer

Je sais que commence par protected override vide OnNavigatedTo (NavigationEventArgs e) { if (NavigationContext.QueryString.ContainsKey (« SelectedEvent »)) {

Mais je ne suis pas sûr de la syntaxe/code pour en extraire l'objet à partir des paramètres

comprendre comment je peux obtenir le selecte Ditem de cette zone de liste et le code pour obtenir l'objet passé par

  • grâce

Répondre

2

Plutôt que de tenter d'accéder à la zone de liste, vous pouvez utiliser l'événement SelectionChanged à dire lorsque la valeur change:

<ListBox x:Name="Events" 
     ItemsSource="{Binding allEventItems}" 
     ItemTemplate="{StaticResource EventDisplay2}" 
     SelectionChanged="Event_SelectionChanged" /> 

Et puis dans votre code derrière:

private void Event_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    this.selectedEvent = (EventItem)e.AddedItems[0]; 
} 

Vous pouvez accéder à la valeur en utilisant NavigationContext.QueryString["selectedEvent"], mais vous ne pouvez stocker des chaînes que dans les chaînes de requête de navigation. Si votre zone de liste est actuellement liée à des objets, vous devez sélectionner une clé puis rechercher cet événement à partir de la deuxième page à l'aide de cette clé.

+0

Ok - merci je ne savais pas si je pouvais passer des objets. – Peter

+0

Donc, vous suggérez que je capture le dernier élément qui a été sélectionné (via l'événement SelectionChanged) et puis au moment où je veux naviguer, je prends la clé de cet objet et la passe à travers. – Peter

+0

C'est exact. –

Questions connexes