wp7: навигация по динамическим опорным точкам в опоре - PullRequest
2 голосов
/ 13 февраля 2011

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

Это будет выглядеть примерно так:

FixedItem | DynamicItem1 | DynamicItem2

ссылка: DynamicItem1

ссылка: DynamicItem2

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

hyperlink.NavigateUri = new Uri("/MainPage.xaml?name=" + p.name, UriKind.Relative);

где p.name - это имя основного элемента. Я не уверен, что это правильный синтаксис, но что сбивает с толку, так это то, что все созданные сводные элементы теряются, оставляя только фиксированный элемент - как если бы он открывал новый экземпляр сводной страницы.

Затем в OnNavigatedTo я попробовал следующее:

 if (NavigationContext.QueryString.ContainsKey("name"))
        {
            // URI is '/page?name=PivotItemToSelect'. 
            string selectedPivotItem = e.Uri.Query.Split('=').Last();

            // Match PivotItemToSelect with the PivotItem's Name. 
            PivotItem pivotItemToShow = pivot.Items.Cast<PivotItem>().Single(i => i.Name == selectedPivotItem);

            pivot.SelectedItem = pivotItemToShow;
            base.OnNavigatedTo(e);
        }

В первой строке я получаю исключение, что эту операцию нельзя выполнить для «относительного» URI. Любой другой способ, которым я мог бы получить эту информацию?

Если я изменю имя сводного элемента на число, скажем i, и передам его i в качестве индекса, я получу следующий код для работы в качестве метода _click для кнопки гиперссылки - но при реальном использовании имя, скорее всего, будет текстовая строка:

pivot.SelectedIndex = int.Parse(i);

Я не уверен, насколько я сошел с колеи, и был бы признателен за любые указатели в правильном направлении.

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2011

Правильный способ доступа к QueryString в вашем событии OnNavigatedTo выглядит следующим образом:

string selectedPivotItem = this.NavigationContext.QueryString["name"];

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

Если вы разрабатываете приложение с динамическим списком элементов для навигации, было бы лучше иметь одну страницу для списка ссылок и одну страницу сведений, которая может использовать строку запроса для привязки к определенному объекту хотят. Это будет работать лучше и иметь больше смысла для ваших пользователей. Но опять же, я не знаю контекста вашего приложения или ваших рассуждений, так что решать вам! :)

...