在UWP中的页面之间传递一些参数

时间:2016-02-10 00:07:50

标签: c# 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将一些参数传递给另一个页面。我不能再使用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项目中传递一些参数?

1 个答案:

答案 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是检索参数的函数。

希望有所帮助。