Параметр чтения Silverlight / F # URL - PullRequest
1 голос
/ 14 марта 2011

У меня есть веб-страницы на SL (xaml), за которыми стоит F #. У меня изначально есть страница для всплывающего окна:

type SomePage(window : ChildWindow, id: int) as this =
inherit UriCanvasControl("/AssemblyName;component/somePage.xaml", "Some Page")

Это не проблема, так как я начал таким образом:

let someWindow = new ChildWindow()
someWindow.Content <- new SomePage(someWindow , id) // assume have id from somewhere
someWindow.Title <- "Some Page"
someWindow.Show()

Теперь я хочу изменить эту страницу на собственную страницу, а не на какое-нибудь всплывающее окно. Я сделал необходимые изменения в xaml и fs SomePage для работы в качестве страницы. Однако у меня возникают проблемы с передачей этого параметра "id" (параметр окна больше не нужен).

Вот как я могу ориентироваться:

let parent = this.Parent :?> Frame
parent.Navigate(new Uri("/AssemblyName;component/somePage.xaml?id=" + id, UriKind.Relative)) |> ignore

так что теперь я получил идентификатор в URL, но как мне его прочитать?

Страница теперь;

type SomePage() as this =
    inherit UriUserControl("/AssemblyName;component/somePage.xaml", "Some Page")

1 Ответ

0 голосов
/ 14 марта 2011

Вот еще одна попытка - вы должны иметь возможность использовать свойство NavigationContext.QueryString, чтобы получить параметр, указанный в строке запроса:

type SomePage() as this =
  inherit UriUserControl("/AssemblyName;component/somePage.xaml", "Some Page") 
  let id = 
    if not(this.NavigationContext.QueryString.ContainsKey("id")) then 0
    else int (this.NavigationContext.QueryString.["id"])
  // .. the rest of the page

РЕДАКТИРОВАНИЕ Следующее будет работать только в WPF - Silverlight не поддерживает перегрузку.

Вместо вызова Navigate с Uri в качестве аргумента вы можете создать страницу, к которой вы хотите перейти (как стандартный объект .NET), а затем вызвать перегрузку Navigate, которая занимает страницу. Затем вы можете легко указать любые параметры, которые вам нужны в качестве аргументов конструктора:

// Declaration of parameterized page
type SomePage(id) as this =
  inherit UriUserControl("/AssemblyName;component/somePage.xaml", "Some Page") 

// Code that navigates to SomePage page with 'id' as argument
let parent = this.Parent :?> Frame
let somePage = new SomePage(id)
parent.Navigate(somePage)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...