代码之家  ›  专栏  ›  技术社区  ›  Joe White

通过wpf页的uri向其传递参数

  •  10
  • Joe White  · 技术社区  · 15 年前

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

    超链接的navigateUri是否可以包含额外的参数,如路径数据或查询字符串?例如,有什么方法可以让我的导航器 /Product.xaml/123 /Product.xaml?id=123 ,并让我的product.xaml页能够看到调用它时使用的参数为 123 ?

    3 回复  |  直到 12 年前
        1
  •  17
  •   Paul Stovell    15 年前

    你可以这样做。见 http://www.paulstovell.com/wpf-navigation :

    虽然不明显,但你可以 将查询字符串数据传递到页面,以及 从路径中提取它。例如, 您的超链接可以在 URI:

    <TextBlock>
        <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink>
    </TextBlock>
    

    当页面加载时,它可以 通过提取参数 NavigationService.CurrentSource 哪一个 返回一个URI对象。然后它可以 检查URI以将 价值观。不过,我强烈推荐 反对这种做法,除了 最可怕的情况。

    更好的方法是使用 超负荷 导航服务。需要 参数的对象。你可以 自己初始化对象,用于 例子:

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

    这假定页构造函数 接收客户对象作为 参数。这可以让你通过 页面之间的信息更加丰富, 而且不需要解析字符串。

        2
  •  0
  •   ShadowKras    12 年前

    另一种方法是在Destiny页上创建一个公共变量,并使用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是您在使用frame时使用的帧,但如果不使用,则不管怎样,navigate命令都保持不变。 这是我的意见,但似乎更容易跟踪它的方式,和更用户友好的那些来自C之前WPF。

        3
  •  0
  •   wchargin Frank    12 年前
    Customer selectedCustomer = (Customer)listBox.SelectedItem; 
    this.NavigationService.Navigate(new CustomerDetailsPage(selectedCustomer)); 
    

    我认为使用你的建议会使你的页面不会被垃圾收集。 因为整个实例将保留在日志中。