Silverlight Навигация + Параметры? - PullRequest
2 голосов
/ 24 августа 2010

Я рассматриваю сценарий, в котором у меня будет приложение Silverlight 3 (или выше), в котором будет использоваться SL Navigation Framework.

Допустим (для простоты), что это будет простой форум. В моем приложении будет страница с именем Forums.xaml

Обычно, когда я перехожу на указанную страницу, URL-адрес в браузере меняется, а конечная строка соответствует имени страницы.

Обычно доступ к сообщению на форуме можно получить, указав его идентификатор в URL (чтобы перейти непосредственно к сообщению на форуме). Возможна ли такая вещь в Silverlight?

1 Ответ

2 голосов
/ 24 августа 2010

Как всегда, это зависит от того, что именно вы ищете.Если вы просто хотите получить значение строки запроса при входе на страницу, используйте словарь, предоставленный NavigationContext.QueryString:

Предполагая, что страница была вызвана со следующим URL:

mainFrame.Navigate(new Uri("/Page1.xaml?Param=value", UriKind.Relative));

Результирующее переопределение OnNavigatedTo может выглядеть следующим образом:

    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (NavigationContext.QueryString.ContainsKey("Param"))
        {
            paramText.Text = NavigationContext.QueryString["Param"];
        }
    }

Тогда вы можете настроить содержимое страницы «Page1» на основе входящего параметра.

Теперь, если вы хотитечтобы использовать Uri Mapping и немного очистить ваш Uri, вы можете объявить UriMapper и передать его в свой фрейм навигации, и использовать его, чтобы изменить ваш «чистый» URL-адрес на тот, в котором есть строка запроса.

        <Navigation:UriMapper x:Key="PageMapper">
            <Navigation:UriMapping Uri="/Things/{value}" MappedUri="/Page1.xaml?Param={value}"/>
        </Navigation:UriMapper>

При вызове с помощью:

mainFrame.Navigate(new Uri("/Things/newValue", UriKind.Relative));

будет работать с тем же вызовом, который указан выше в OnNavigatedTo, при этом «newValue» передается как строка запроса (в вашем случае, Id), а в адресе появляется следующеебар:

'http://localhost:1877/SilverlightApplication3TestPage.aspx#/Things/newValue

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