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

ham*_*jz4 22 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));

    }
Run Code Online (Sandbox Code Playgroud)

在该代码中,我使用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);
    }
Run Code Online (Sandbox Code Playgroud)

该代码给我一个错误,因为它需要5个参数,即+2重载.我的问题是如何以正确的方式在UWP项目中传递一些参数?

Rob*_*iel 47

您在Windows(Phone)8中传递的内容只是一个简单的内容string,其中包含了所有参数.您必须在OnNavigatedTo()目标页面的方法中解析它们.当然,您仍然可以执行此操作并将字符串传递给Frame.Navigate()方法.

但是因为UWP你可以将完整的对象传递给其他页面.那么为什么不创建一个包含所有参数的小类并传递一个实例呢?

你的课可能看起来像:

public class RestaurantParams
{
    public string Name { get; set; }
    public string Text { get; set; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后通过:

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

Frame.Navigate(typeof(PageTwo), parameters);
Run Code Online (Sandbox Code Playgroud)

在下一页上,您现在可以通过以下方式访问它们:

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

    var parameters = (RestaurantParams)e.Parameter;

    // parameters.Name
    // parameters.Text
    // ...
}
Run Code Online (Sandbox Code Playgroud)

其中Parameter是检索参数的函数.

希望有所帮助.