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

C# 在UWP中的页面之间传递一些参数,c#,uwp,C#,Uwp,我尝试将一些WindowsPhone8项目移植到当前的UWP中,并被我在旧项目中使用的这个代码片段绊住了 private void Restaurant_Tap(object sender, System.Windows.Input.GestureEventArgs e) { string types = "restaurant"; string title = "restaurant"; string url = string.Format("/NearbyPlaces

我尝试将一些WindowsPhone8项目移植到当前的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项目中传递一些参数?

您在Windows(Phone)8中传递的只是一个包含所有参数的简单字符串。您必须在目标页面的
OnNavigatedTo()
方法中解析它们。当然,您仍然可以这样做,并将字符串传递给
Frame.Navigate()
方法

但由于UWP,您可以将完整的对象传递给其他页面。那么,为什么不创建一个包含所有参数的小类并传递该类的实例呢

您的类可能看起来像:

public class RestaurantParams
{
    public 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
    // ...
}
其中参数是检索参数的函数


希望对您有所帮助。

我在UWP项目中尝试了上述方法,这给了我一个错误,您的参数必须是可序列化的。如果不是,则使用SessionState。不确定如何修复。这意味着,您传递的参数不能在后台转换为字符串。你能给我们看看你传递的参数吗?我剪切并粘贴了这个类(RestaurantParams)到我的项目中进行测试,我得到了同样的错误。我在想也许UWP改变了这一切。我知道在以前的一个项目中,我成功地发送了字符串,但这次没有。我提供的示例是为UWP提供的,适合我。你能给我们更多关于例外情况和你的项目的详细信息吗?我已经更新了样本。仅供参考,可序列化类需要无参数构造函数。e、 g public RestaurantParams(){},位于新行类型上