いくつかの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プロジェクトでいくつかのパラメータを適切に渡す方法ですか?
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は引数を取得する関数です。
お役に立てば幸いです。