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

通过WPF页面的Uri将参数传递给WPF页面,wpf,navigation,query-string,navigateuri,Wpf,Navigation,Query String,Navigateuri,在导航样式WPF应用程序(NavigationWindow,而不是XBAP)的上下文中: 超链接的NavigateUri是否可能包含额外的参数,如路径数据或查询字符串?例如,是否有某种方法可以将我的NavigateUri设置为/Product.xaml/123或/Product.xaml?id=123,并使我的Product.xaml页面能够看到它是使用参数123调用的?您可以这样做。见: 虽然不明显,但你可以 将查询字符串数据传递给页面,然后 从路径中提取它。例如 您的超链接可以在中传递值 U

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

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

您可以这样做。见:

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

<TextBlock>
    <Hyperlink NavigateUri="Page2.xaml?Message=Hello">Go to page 2</Hyperlink>
</TextBlock>
这假定页面构造函数 接收客户对象作为 参数这允许你通过考试 页面之间的信息要丰富得多, 而且不需要解析字符串

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

另一种方法是在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是在使用框架时使用的框架,但如果不是,则导航命令将保持不变。
这是我的观点,但这样追踪它似乎更容易,而且对那些在WPF之前从C#来的人来说更友好。

你的导航服务呼叫属于哪里?在超链接的单击处理程序中?这似乎会导致后面的代码中有很多额外的连接。是的,与ASP.NET MVC中呈现超链接的代码出现在视图中,而不是模型/控制器中的方式相同。从一个视图到另一个视图的导航应该是一个视图问题。在某种程度上,它看起来像ASP.NET MVC:“超链接”将出现在视图上,但它将调用某些内容来执行页面更改。为此,我创建了一个控制器,使用静态方法和静态“MainWindow”对象,其中包含显示所有页面的框架。如果我想更改页面,我只需调用“MainController.ChangePage(page)”就可以了;此外,Naviagte方法似乎没有将页面作为参数,而是只有一个URI对象作为第一个建议将启用集合。如果调用NavigationService.RemoveBackEntry足够多的时间来“清除”日志,则仍可收集第二个建议。不过,WPF框架在这方面确实很差劲:
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);