Не могу получить доступ к 2+ Child of Databound Pivot - PullRequest
0 голосов
/ 14 февраля 2012

Хорошо, это мой первый пост здесь, поэтому я не уверен, насколько подробным я должен быть, и я не лучший в описании вещей, но я сделаю это.

Таким образом, на главной странице моего приложения, когда пользователь нажимает на текстовый блок, он отправляет их на следующую страницу, которая является динамической сводной страницей:

<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 не имеет дочерних элементов, и выдает ошибку.

Любая идея, что я могу сделать, чтобы обойти это?Может быть, я все об этом ошибаюсь.Если вам нужно больше деталей, просто дайте мне знать.

1 Ответ

0 голосов
/ 14 февраля 2012

Элемент управления Pivot задерживает PivotItemss до тех пор, пока он действительно не понадобится - он загружает только текущий PivotItem и тот, что до и после него.Когда пользователь переходит к следующему PivotItem, вы увидите созданный PivotItem.

Это также проявляется при попытке восстановить пользователя к предыдущему PivotItem после захоронения - он падает при попытке восстановления доТретий опорный элемент, как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...