Существует метод строки запроса, но его реализация может быть затруднена.
При навигации передайте параметр как строку запроса HTTP.
Затем, на другой стороне, проверьте, существует ли ключ, и извлеките значение. Недостатком этого является то, что если вам нужно сделать больше 1, вам нужно ввести его самостоятельно, и он поддерживает только строки.
Итак, чтобы передать целое число, вам нужно его преобразовать. (И чтобы передать сложный объект, вам нужно взять все части, которые вам нужны, чтобы перекомпилировать его на другой стороне)
NavigationService.Navigate(new Uri("/PanoramaPage1.xaml?selected=item2", UriKind.Relative));
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
string selected = String.Empty;
//check to see if the selected parameter was passed.
if (NavigationContext.QueryString.ContainsKey("selected"))
{
//get the selected parameter off the query string from MainPage.
selected = NavigationContext.QueryString["selected"];
}
//did the querystring indicate we should go to item2 instead of item1?
if (selected == "item2")
{
//item2 is the second item, but 0 indexed.
myPanorama.DefaultItem = myPanorama.Items[1];
}
base.OnNavigatedTo(e);
}
Вот пример приложения, которое использует строку запроса.
http://dl.dropbox.com/u/129101/Panorama_querystring.zip
Более простая (и лучшая) идея - определить переменную глобально или использовать статический класс. В App.xaml.cs
определите
using System.Collections.Generic;
public static Dictionary<string,object> PageContext = new Dictionary<string,object>;
Затем на первой странице просто выполните
MyComplexObject obj;
int four = 4;
...
App.PageContext.Add("mycomplexobj",obj);
App.PageContext.Add("four",four);
Затем на новой странице просто сделайте
MyComplexObj obj = App.PageContext["mycomplexobj"] as MyComplexObj;
int four = (int)App.PageContext["four"];
Чтобы быть в безопасности, вы, вероятно, должны проверить, существует ли объект:
if (App.PageContext.ContainsKey("four"))
int four = (int)App.PageContext["four"];