在导航风格的 WPF 应用程序(NavigationWindow,不是 XBAP)的上下文中:
超链接的 NavigateUri 是否可以包含额外的参数,例如路径数据或查询字符串?例如,有什么方法可以将我的 NavigateUri 设置为/Product.xaml/123
or /Product.xaml?id=123
,并让我的 Product.xaml 页面能够看到它是使用参数调用的123
?
在导航风格的 WPF 应用程序(NavigationWindow,不是 XBAP)的上下文中:
超链接的 NavigateUri 是否可以包含额外的参数,例如路径数据或查询字符串?例如,有什么方法可以将我的 NavigateUri 设置为/Product.xaml/123
or /Product.xaml?id=123
,并让我的 Product.xaml 页面能够看到它是使用参数调用的123
?
你可以这样做。请参阅http://www.paulstovell.com/wpf-navigation:
虽然不是很明显,但您可以将查询字符串数据传递到页面,并从路径中提取它。例如,您的超链接可以在 URI 中传递一个值:
<TextBlock> <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink> </TextBlock>
页面加载后,可以通过 提取参数
NavigationService.CurrentSource
,返回一个 Uri 对象。然后它可以检查 Uri 以分离这些值。但是,我强烈建议不要使用这种方法,除非在最可怕的情况下。一个更好的方法是使用 NavigationService.Navigate 的重载,它接受一个对象作为参数。您可以自己初始化对象,例如:
Customer selectedCustomer = (Customer)listBox.SelectedItem; this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
这假定页面构造函数接收一个 Customer 对象作为参数。这允许您在页面之间传递更丰富的信息,而无需解析字符串。
Customer selectedCustomer = (Customer)listBox.SelectedItem;
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer));
Paul Stovell 我认为使用您的建议将使您的页面不会被垃圾收集,因为整个实例将保留在 Journal 上。
另一种方法是在命运页面上创建一个公共变量并使用 get/set 属性为其分配一个值。
在页面上:
private Int32 pMyVar;
public Int32 MyVar
{
get { return this.pMyVar; }
set { this.pMyVar = value; }
}
导航到它时:
MyPagePath.PageName NewPage = new MyPagePath.PageName();
NewPage.MyVar = 10;
this.MainFrameName.NavigationService.Navigate(NewPage);
加载 NewPage 时,整数 MyVar 将等于 10。 MainFrameName 是您正在使用的框架,以防您正在使用框架,但如果不是,则导航命令仍然保持不变。这是我的意见,但这样跟踪它似乎更容易,并且对那些在 WPF 之前来自 C# 的人更友好。