好的,这是我在这里的第一篇文章,所以我不确定我需要多么详细,而且我不是最好的描述事情,但我会试一试。
因此,在我的应用程序的主页面上,当用户点击文本块时,它会将它们发送到下一页,这是一个动态的数据透视页面:
<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来自here
所以这是我的问题: 当我选择第一个数据集和第一个数据透视表时,这一切都正常,否则它表示pivotItem没有任何子节点并抛出错误。
任何想法都是我可以做些什么来解决这个问题?也许我说这一切都错了。如果您需要更多详细信息,请告诉我。
答案 0 :(得分:0)
Pivot控件延迟加载PivotItemss直到它们实际需要为止 - 它只加载当前的PivotItem以及它之前和之后的PivotItem。当用户导航到下一个PivotItem时,您将看到创建的PivotItem。
当在逻辑删除后尝试将用户恢复到上一个数据透视表时,这也会显示出来 - 如果尝试按照here所述恢复到第三个数据透视表项,它就会失效。