如何将参数传递给页面?

时间:2011-11-22 09:51:46

标签: silverlight silverlight-4.0 parameter-passing

我有一个加载到框架中的页面。在后面的代码中,我有一个名为mode的字符串变量。我想要做的是当点击超链接,打开页面并设置模式

我希望以声明的方式做到这一点。我试着做了

NavigatUri="myPage?mode=edit"

然后在初始化组件调用

之后将以下内容添加到后面的代码中
mode = this.NavigationContext.QueryString["mode"];

但是我找不到页面错误。我有一种感觉,我在另一个星球上。我是银光的新手。如何以这种方式导航到页面并传递该参数?

1 个答案:

答案 0 :(得分:1)

查看主页中的UriMapper。最终的UriMapping通常是所有看起来像这样的东西: -

<uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>

您将在Uri的开头注意“/”,相应的页面属于“/ Views”文件夹。

使用属性: -

 NavigatUri="/myPage?mode=edit" 

确保您的页面位于Views文件夹中。

但是我很确定你已经有了。您真正的问题是您尝试在执行页面构造函数时访问NavigationContext。它在页面生命周期中的那个时候不可用。在OnNavigatedTo执行之前,您不应尝试使用它。

public partial class MyPage : Page
{
    public MyPage()
    {
        InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        string mode = null;
        if (NavigationContext.QueryString.ContainsKey("mode"))
        {
            mode = NavigationContext.QueryString["mode"];
        }

        // Do stuff with mode.
    }
}

您看到“找不到页面错误”的原因是因为导航应用程序ErrorWindow只是假设任何加载页面失败的原因是因为找不到它。假设您已正确编码页面,这可能是一个合理的假设。