通过其Uri将参数传递给WPF页面

时间:2009-08-29 14:20:06

标签: wpf navigation query-string navigateuri

在导航样式的WPF应用程序(NavigationWindow,而不是XBAP)的上下文中:

Hyperlink的NavigateUri是否可以包含额外的参数,例如路径数据或查询字符串?例如,有什么方法可以将我的NavigateUri设置为/Product.xaml/123/Product.xaml?id=123,并让我的Product.xaml页面能够看到它是使用参数123调用的吗? / p>

3 个答案:

答案 0 :(得分:17)

你可以这样做。见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对象作为   参数。这允许你通过   页面之间更丰富的信息,   并且无需解析字符串。

答案 1 :(得分:0)

Customer selectedCustomer = (Customer)listBox.SelectedItem; 
this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer)); 

Paul Stovell我认为使用您的建议会使您的网页不被垃圾收集 因为整个实例将保留在Journal上。

答案 2 :(得分:0)

另一种方法是在命运页面上创建一个公共变量,并使用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#的用户更友好。