无法访问2+ Child of Databound Pivot

时间:2012-02-14 06:12:20

标签: windows-phone-7

好的,这是我在这里的第一篇文章,所以我不确定我需要多么详细,而且我不是最好的描述事情,但我会试一试。

因此,在我的应用程序的主页面上,当用户点击文本块时,它会将它们发送到下一页,这是一个动态的数据透视页面:

<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没有任何子节点并抛出错误。

任何想法都是我可以做些什么来解决这个问题?也许我说这一切都错了。如果您需要更多详细信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

Pivot控件延迟加载PivotItemss直到它们实际需要为止 - 它只加载当前的PivotItem以及它之前和之后的PivotItem。当用户导航到下一个PivotItem时,您将看到创建的PivotItem。

当在逻辑删除后尝试将用户恢复到上一个​​数据透视表时,这也会显示出来 - 如果尝试按照here所述恢复到第三个数据透视表项,它就会失效。