我正在开发一个有两个页面的UWP应用程序,我希望最佳实践是在页面之间传递参数。 我也想连续不断地传递信息
以下情况的最佳方法是什么?
例如,更改页面中的用户控件。 我们有两个页面,每个页面都打开并保留在屏幕中间,每个页面上都有一个按钮,当我们单击另一页面时,该按钮会更改另一页面的背景颜色。
谢谢您的帮助,
答案 0 :(得分:1)
您可以将导航参数作为Frame.Navigate
方法的第二个参数提供:
Frame.Navigate(typeof(SecondPage),"something");
然后在第二页的OnNavigatedTo
替代中获取参数:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var data = (string)e.Parameter; //"something"
...
}
作为重复项建议的答案没有提及一个重要事实-参数只能是启用导航状态序列化的基本类型。如文档所述:
要使用GetNavigationState启用帧状态序列化,必须仅对导航参数使用基本类型,例如字符串,字符,数字和GUID类型。否则,当应用程序挂起时,GetNavigationState将引发异常。如果不使用GetNavigationState,则参数可以具有其他类型。
即使您不需要支持挂起和帧状态序列化,最好还是坚持使用简单的参数并将日期存储在其他位置。再次来自文档:
如果不使用GetNavigationState,则参数值可以具有复杂的类型。但是,您仍应仅使用基本类型,以避免由于框架的导航堆栈持有对该参数的引用而导致过多的内存使用。一种首选方法是不传递实际对象,而是传递一个标识符,您可以使用该标识符在目标登录页面中查找该对象。例如,不传递客户对象,而是传递对CustomerID的引用,然后在导航完成后查找客户。
如果需要传递复杂的对象,通常会倾向于使用JSON序列化将其转换为string
,然后在目标页面中反序列化。为此,您可以使用很棒的Json.NET library。