web-dev-qa-db-ja.com

UWPのページ間でパラメーターを渡す

いくつかのWindows Phone 8プロジェクトを現在のUWPに移植しようとしていますが、古いプロジェクトで使用していたこのスニペットコードに引っかかっています。

 private void Restaurant_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        string types = "restaurant";
        string title = "restaurant";
        string url = string.Format("/NearbyPlaces.xaml?latitude={0}&longitude={1}&types={2}&title={3}", LocationLatitude.Text, LocationLangitude.Text, types, title);
        NavigationService.Navigate(new Uri(url, UriKind.Relative));

    }

そのコードでは、NavigationServiceを使用していくつかのパラメーターを別のページに渡しました。 UWPでサポートされていないため、NaigationServiceを使用できなくなりました。 UWPプロジェクトでこれを使用してみましたが、1つのパラメーターCMIIWを渡す場合にのみサポートされていると思います。

 private void restaurant_tapped(object sender, TappedRoutedEventArgs e)
    {
        string types = "restaurant";
        string title = "restaurant";
        Frame.Navigate(typeof(placeResult), latLoc.Text, longLoc.Text, types, title);
    }

このコードは5つの引数を必要とするため、エラーが発生します。これは+2のオーバーロードです。私の質問は、UWPプロジェクトでいくつかのパラメータを適切に渡す方法ですか?

22
hamdanjz4

Windows(Phone)8で渡したものは、すべてのパラメーターを含む単純なstringに過ぎません。ターゲットページのOnNavigatedTo()メソッドでそれらを解析する必要がありました。もちろん、あなたはまだそれをして、Frame.Navigate()メソッドに文字列を渡すことができます。

ただし、UWPを使用すると、完全なオブジェクトを他のページに渡すことができます。では、すべてのパラメーターを含む小さなクラスを作成して、そのインスタンスを渡してみませんか?

クラスは次のようになります。

public class RestaurantParams
{
    public string Name { get; set; }
    public string Text { get; set; }
    // ...
}

そして、それを経由して渡します:

var parameters = new RestaurantParams();
parameters.Name = "Lorem ipsum";
parameters.Text = "Dolor sit amet.";
// ...

Frame.Navigate(typeof(PageTwo), parameters);

次のページで、次の方法でアクセスできます。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    var parameters = (RestaurantParams)e.Parameter;

    // parameters.Name
    // parameters.Text
    // ...
}

ここで、Parameterは引数を取得する関数です。

お役に立てば幸いです。

47