Хорошо, это мой первый пост здесь, поэтому я не уверен, насколько подробным я должен быть, и я не лучший в описании вещей, но я сделаю это.
Таким образом, на главной странице моего приложения, когда пользователь нажимает на текстовый блок, он отправляет их на следующую страницу, которая является динамической сводной страницей:
<Grid x:Name="LayoutRoot" Background="Transparent" DataContext="{Binding Products}">
<!--Pivot Control-->
<controls:Pivot x:Name="Pivot" Title="{Binding name}" ItemsSource="{Binding pivots}">
<controls:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding title}" />
</DataTemplate>
</controls:Pivot.HeaderTemplate>
<controls:Pivot.ItemTemplate>
<DataTemplate>
<ListBox Margin="0,0,-12,0" ItemsSource="{Binding partners}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432" Height="58">
<TextBlock Text="{Binding name}" TextWrapping="Wrap" Tap="showDetails" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</controls:Pivot.ItemTemplate>
</controls:Pivot>
</Grid>
Он передает параметр, который указывает, какой DataContext должен использоватьсяна странице, и какой стержень должен быть выбран.Затем OnNavigation анализирует эти параметры:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
base.OnNavigatedTo(e);
string selectedType = this.NavigationContext.QueryString["type"];
string selectedPivot = this.NavigationContext.QueryString["pivot"];
int selectedIndex = 0;
switch (selectedType) {
case "product":
LayoutRoot.DataContext = App.ViewModel.Products;
selectedIndex = Array.IndexOf(App.ViewModel.ProductTypes, selectedPivot);
break;
case "service":
LayoutRoot.DataContext = App.ViewModel.Services;
selectedIndex = Array.IndexOf(App.ViewModel.ServiceTypes, selectedPivot);
break;
default:
LayoutRoot.DataContext = App.ViewModel.Products;
break;
}
Pivot.SelectedIndex = selectedIndex;
PivotItem pivotItem = Pivot.ItemContainerGenerator.ContainerFromItem(Pivot.SelectedItem) as PivotItem;
this.selectedList = FindFirstElementInVisualTree<ListBox>(pivotItem);
}
FindFirstElementInVisualTree от здесь
Итак, вот моя проблема: Все это прекрасно работает, когда я выбираю первый набор данных и первый сводный элемент, в противном случае он говорит, что pivotItem не имеет дочерних элементов, и выдает ошибку.
Любая идея, что я могу сделать, чтобы обойти это?Может быть, я все об этом ошибаюсь.Если вам нужно больше деталей, просто дайте мне знать.