【问题标题】:wp7: navigating dynamic pivotitems in a pivotwp7:在枢轴中导航动态枢轴项
【发布时间】:2011-06-26 06:40:30
【问题描述】:

我有一个数据透视页面,其中包含一个固定的数据透视项,并且根据数据,还有动态数量的附加数据透视项。固定的数据透视项保留了创建的新数据透视项的超链接列表,其想法是单击任何链接并导航到该数据透视项。

看起来像这样:

固定项目 | 动态项目1 | DynamicItem2

链接:DynamicItem1

链接:DynamicItem2

我面临的问题是单击超链接,它不会将我带到相应的数据透视项,而是将我带到没有动态数据透视项的数据透视页面。我正在使用以下代码进行导航:

hyperlink.NavigateUri = new Uri("/MainPage.xaml?name=" + p.name, UriKind.Relative);

其中 p.name 是枢轴项的名称。我不确定这是否是正确的语法,但令人困惑的是所有创建的数据透视项都丢失了,只留下固定项 - 好像它正在打开数据透视页面的新实例。

然后,在 OnNavigatedTo 中我尝试了以下操作:

 if (NavigationContext.QueryString.ContainsKey("name"))
        {
            // URI is '/page?name=PivotItemToSelect'. 
            string selectedPivotItem = e.Uri.Query.Split('=').Last();

            // Match PivotItemToSelect with the PivotItem's Name. 
            PivotItem pivotItemToShow = pivot.Items.Cast<PivotItem>().Single(i => i.Name == selectedPivotItem);

            pivot.SelectedItem = pivotItemToShow;
            base.OnNavigatedTo(e);
        }

在第一行,我得到一个异常,该操作不能在“相对”URI 上完成。我还有其他方法可以获取这些信息吗?

如果我将数据透视项名称更改为一个数字,比如 i,并将 i 作为索引传递,我得到以下代码作为超链接按钮的 _click 方法工作 - 但在实际使用中,该名称很可能是文本字符串:

pivot.SelectedIndex = int.Parse(i);

我不确定自己的偏离程度如何,如果有任何正确方向的指点,我将不胜感激。

谢谢。

【问题讨论】:

    标签: windows-phone-7 navigation pivot selecteditem


    【解决方案1】:

    在 OnNavigatedTo 事件中访问 QueryString 的正确方法如下:

    string selectedPivotItem = this.NavigationContext.QueryString["name"];
    

    像这样使用 Pivot 控件进行导航看起来很奇怪,但由于我对您的应用程序的上下文一无所知,所以我假设您选择它是有原因的。

    如果您正在设计一个包含要导航到的动态项目列表的应用程序,最好为您的链接列表提供一个页面和一个可以使用查询字符串绑定到您的特定对象的详细信息页面想要。这将表现得更好,对您的用户更有意义。但同样,我不知道你的应用程序的上下文或你的推理,所以这取决于你! :)

    【讨论】:

    • 什么是更好的导航方式?我正在开发一个信使类型的应用程序,当新的聊天窗口打开时,我会将它们添加到数据透视表中。主数据中心页面将包含指向每个打开的聊天的链接,因此用户可以直接跳转到该页面。这就是为什么我想要多个数据透视表,这样用户也可以滑动并浏览数据透视表。
    • 由于所有的数据透视表都在同一个数据透视页面上,我认为 OnNavigatedTo 方法不会看到所有新创建的数据透视表。在调试期间,它只看到第一个。因此,我将以下代码放在超链接的 Click 事件中,它似乎有效: string pivotName = ((HyperlinkBut​​ton)sender).Content.ToString(); // 超链接的内容属性设置为与数据透视项相同的标题字符串 selectedPivotItem = pivotName; PivotItem pivotItemToShow = pivot.Items.Cast().Single(i => i.Name == selectedPivotItem); pivot.SelectedItem = pivotItemToShow;
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多