如何通过XAML页面之间的值(参数)?(How to pass values (parameters

2019-06-18 04:17发布

以前类似的问题已经被问,但这个问题,努力探索更多的选择,并通过复杂的对象的能力。

现在的问题是如何传递参数,但它确实需要被分成三个部分..

  1. 当在一个XAML应用程序页面之间导航,你如何传递参数?
  2. 什么是使用URI导航功能和手动导航之间的区别?
  3. 如何对象(不只是字符串),使用URI导航功能的时候通过?

乌里导航的示例

page.NavigationService.Navigate(new Uri("/Views/Page.xaml", UriKind.Relative));

手动导航的示例

page.NavigationService.Navigate(new Page());

在回答这个问题适用于WP7,Silverlight的,WPF和Windows 8。

注意:有Silverlight和Windows8的之间的差异

  • Windows Phone的:页面浏览到使用URI并作为查询字符串或实例传递的数据
  • Windows 8的 :页面被传递型导航到,并且参数作为对象

Answer 1:

方法来传递参数

1.使用查询字符串

你可以通过查询字符串传递参数,使用这种方法意味着必须将数据转换为字符串和URL进行编码。 您应该只用它来传递简单的数据。

导航页:

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));

目标页面:

string parameter = string.Empty;
if (NavigationContext.QueryString.TryGetValue("parameter", out parameter)) {
    this.label.Text = parameter;
}

2.使用NavigationEventArgs

导航页:

page.NavigationService.Navigate(new Uri("/Views/Page.xaml?parameter=test", UriKind.Relative));

// and ..

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    // NavigationEventArgs returns destination page
    Page destinationPage = e.Content as Page;
    if (destinationPage != null) {

        // Change property of destination page
        destinationPage.PublicProperty = "String or object..";
    }
}

目标页面:

// Just use the value of "PublicProperty"..

3.使用手册导航

导航页:

page.NavigationService.Navigate(new Page("passing a string to the constructor"));

目标页面:

public Page(string value) {
    // Use the value in the constructor...
}

URI和手动导航之间差

我觉得这里的主要区别是应用程序的生命周期。 手动创建的页面保存在内存中进行导航的理由。 了解更多关于它在这里 。

传递复杂对象

您可以使用方法的一个或两个人通过复杂的对象(推荐)。 您还可以添加自定义属性的Application在课堂上或存储数据Application.Current.Properties



文章来源: How to pass values (parameters) between XAML pages?