39

以前にも同様の質問がありましたが、この質問はより多くのオプションと複雑なオブジェクトを渡す機能を探るためのものです。

問題はパラメータを渡す方法ですが、実際には 3 つの部分に分割する必要があります。

  1. XAML アプリケーションでページ間を移動するとき、どのようにパラメーターを渡しますか?
  2. Uri ナビゲーションと手動ナビゲーションの違いは何ですか?
  3. Uri ナビゲーションを使用する場合、オブジェクト (文字列だけでなく) をどのように渡すことができますか?

ウリナビゲーションの例

page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative));

手動ナビゲーションの例

page.NavigationService.Navigate(new Page());

この質問への回答は、WP7、silverlight、WPF、および Windows 8 に適用されます。

注: Silverlight と Windows8 には違いがあります。

  • Windows Phone: ページは Uri を使用してナビゲートされ、データはクエリ文字列またはインスタンスとして渡されます
  • Windows 8 : タイプとパラメーターをオブジェクトとして渡すことで、ページに移動します。
4

2 に答える 2

88

パラメータを渡すメソッド

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

于 2012-09-16T06:17:03.700 に答える
0

フレームをオーバーライドしてナビゲートする onNavigatedTo 関数がないため、まだ問題がある場合は、これを使用しました。

移動元のページ: このページの名前が「StartPoint.xaml」であるとします。

NameOfFrame.Navigate(new System.Uri("Destination.xaml", UriKind.RelativeOrAbsolute), ValueToBePassed);

  • ValueToBePassed は、私の場合、オブジェクトで試していない単純な文字列でした。(単純な文字列で意味しますstring code = "hello world";

Destination.xaml ページで: ページ読み込みイベントを作成します。

  • これを行うには、ページのプロパティ ウィンドウ > イベント > ロード済み > ロード済みの横のフィールドをダブルクリックして関数を自動生成し、コード ビハインドでそれに移動します。

Destinations.xaml > 読み込み

private string x;

private void Page_Loaded(object sender, RoutedEventArgs e)
{
   x = StartPoint.ValueToBePassed;
   //Call functions or do other stuff while im here
   //e.g. if (x != "") { please work you damn code }
   //     else { go to sleep and forget about the worries }
}
于 2022-01-11T23:56:58.473 に答える