我尝试将一些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将一些参数传递给另一个页面。我不能再使用NaigationService了,因为UWP不支持它。我在我的UWP项目中尝试过使用它,但我认为只支持传递一个参数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项目中传递一些参数?
答案 0 :(得分:41)
您在Windows(手机)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是检索参数的函数。
希望有所帮助。