2012-02-14 9 views
0

これは私の最初の投稿ですので、どのように詳細にする必要があるのか​​分かりませんし、物事を説明するのに最善ではありませんが、それはショット。データバインドされたピボットの2歳以上の子供にアクセスできない

だから、私のアプリのメインページに、それは動的なピボットページで、次のページに送信しますテキストブロック上のユーザーがクリックするとき:

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

FindFirstElementInVisualTreehere

からだからここに私の問題ですされています この私が最初のデータセットと第一のピボットを選択すると、すべてがそうでなければ、それは言って、正常に動作しますpivotItemには子がなく、エラーがスローされます。

私はこれを回避するために何ができるのですか?たぶん私はこれについてすべて間違っているつもりです。詳細が必要な場合は、私に知らせてください。

答えて

0

Pivotコントロールは、Pivo​​tItemssが実際に必要になるまで遅延ロードします。現在のPivotItemとその前と後のPivotItemのみを読み込みます。ユーザーが次のPivotItemに移動すると、作成されたPivotItemが表示されます。

これは、墓碑け後に以前のPivotItemにユーザーを復元しようとするときにも表示されます。hereのように3番目のピボットアイテムに復元しようとすると失敗します。

+1

投稿を読んでください。私は言及された問題を抱えているようではありません。次の前のピボットアイテム以外のピボットアイテムを選択できます。 私は回避策を見ましたが、どのように適用されたかはわかりませんでした。 – JustMaier

関連する問題