以前にも同様の質問がされていましたが、この質問はより多くのオプションと複雑なオブジェクトを渡す機能を探求しようとしています。
問題はパラメータを渡す方法ですが、実際には3つの部分に分割する必要があります。
Uriナビゲーションの例
page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative));
手動ナビゲーションの例
page.NavigationService.Navigate(new Page());
この質問に対する答えは、WP7、silverlight、WPF、およびWindows 8に適用されます。
注:SilverlightとWindows8には違いがあります
1。クエリ文字列の使用
クエリ文字列を介してパラメータを渡すことができます。このメソッドを使用すると、データを文字列に変換し、URLエンコードする必要があります。これは単純なデータを渡すためにのみ使用する必要があります。
ページの移動:
page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));
宛先ページ:
string parameter = string.Empty;
if (NavigationContext.QueryString.TryGetValue("parameter", out parameter)) {
this.label.Text = parameter;
}
2。 NavigationEventArgsの使用
ページの移動:
page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));
// and ..
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
// NavigationEventArgs returns destination page
Page destinationPage = e.Content as Page;
if (destinationPage != null) {
// Change property of destination page
destinationPage.PublicProperty = "String or object..";
}
}
宛先ページ:
// Just use the value of "PublicProperty"..
3。手動ナビゲーションの使用
ページの移動:
page.NavigationService.Navigate(new Page("passing a string to the constructor"));
宛先ページ:
public Page(string value) {
// Use the value in the constructor...
}
ここでの主な違いは、アプリケーションのライフサイクルだと思います。手動で作成されたページは、ナビゲーションのためにメモリに保存されます。詳細については こちら をご覧ください。
メソッド1または2を使用して、複雑なオブジェクトを渡すことができます(推奨)。 Application
クラスにカスタムプロパティを追加したり、Application.Current.Properties
にデータを保存したりすることもできます。