2011-02-13 50 views
2

我有一个数据透视页面,有一个固定的pivotitem,并根据数据,动态数量的其他pivotitems。固定的pivotitem保持创建的新的pivotitems的超链接列表,并且想法是点击任何链接并导航到该pivotitem。wp7:导航动态pivotitems在一个枢轴

这将是这个样子:

FixedItem | DynamicItem1 | DynamicItem2

链接:DynamicItem1

链接:DynamicItem2

我现在面临的问题是与超链接点击,它不带我去各个pivotitem,而是带我去枢轴页面没有动态的pivotitems。我正在使用以下代码进行导航:

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

其中,p.name是pivotitem的名称。我不确定这是否是正确的语法,但是令人困惑的是,所有创建的pivotitems都会丢失,只剩下fixeditem - 就好像它正在打开pivot页面的新实例一样。

然后,在我的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来完成。任何其他方式我可以得到这些信息?

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

pivot.SelectedIndex = int.Parse(i); 

我不知道我是如何完全离开赛道,并会感谢任何指向正确方向的指针。

谢谢。

回答

0

访问您的OnNavigatedTo事件的查询字符串的正确方法是这样的:

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

使用为您导航一个枢轴控件像这似乎很奇怪,但因为我知道也不关心你的应用程序上下文,我会假设你选择它是有原因的。

如果您正在设计一个带有要导航到的动态项目列表的应用程序,最好为链接列表提供一个页面,并且可以使用查询字符串绑定到特定对象的单个详细信息页面你想要。这将更好地执行,并使用户更有意义。但是,我不知道你的应用程序的背景或推理,所以这取决于你! :)

+0

什么是更好的导航方式?我正在开发一个messenger类型的应用程序,当新的聊天窗口打开时,我将它们添加到数据透视表中。主枢纽页面将链接到每个打开的聊天记录,因此用户可以直接跳到该页面。这就是为什么我想要有多个pivotitems,所以用户只需滑动并浏览pivotitems。 – wp7dev 2011-02-13 11:01:28