如何在XAML页面之间传递值(参数)?

之前也曾提出过类似的问题,但是这个问题致力于探索更多的选择以及传递复杂对象的能力。

问题是如何传递参数,但实际上需要将其分为三部分。

  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:通过将类型和参数作为对象传递来导航到页面

回答:

传递参数的方法

您可以通过查询字符串传递参数,使用此方法意味着必须将数据转换为字符串并对其进行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;

}

导航页面:

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"..

导航页面:

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

以上是 如何在XAML页面之间传递值(参数)? 的全部内容, 来源链接: utcz.com/qa/411225.html

回到顶部