[英]Loop through pivot items and check headers wp8
我有一个名为“infra”的数据透视表,我想遍历所有数据透视表项目并检查每个项目的标题值,以确定我应该为用户加载哪个页面。 我下面的代码似乎不起作用。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string headerName;
if (NavigationContext.QueryString.TryGetValue("goto", out headerName))
{
foreach (PivotItem pi in infra.Items)
{
if (pi.Header.ToString() == headerName)
infra.SelectedItem = pi;
}
}
base.OnNavigatedTo(e);
}
关于如何做到这一点的任何想法,上面代码的变体都适用于全景图,但我不得不更改为枢轴。
附加信息:我在全景页面上基于一些 JSON 动态创建按钮,我也在基于其他一些 JSON 动态创建数据透视项。 这些按钮应将用户带到特定的枢轴项。 按钮“x:name”属性与数据透视项标题相同。
我不确定您为什么要尝试将 index (变量strItemIndex
名称)与Header
。 您可以使用 SelecedIndex 轻松切换 PivotItem:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string strItemIndex;
if (NavigationContext.QueryString.TryGetValue("goto", out strItemIndex))
infra.SelectedIndex = int.Parse(strItemIndex);
base.OnNavigatedTo(e);
}
编辑- 在评论和 OP 编辑之后:
如果您需要使用 Header 识别您的 PivotItem,那么您的代码看起来没问题。 可以稍微优化一下:
string headerName;
PivotItem itemToNavigate = null;
if (NavigationContext.QueryString.TryGetValue("goto", out headerName))
itemToNavigate = infra.Items.FirstOrDefault(x => (x as PivotItem).Header.ToString() == headerName) as PivotItem;
if (itemToNavigate != null) infra.SelectedItem = item;
else infra.SelectedIndex = 0; // navigate to default one (remember to check first if there are any items)
哪里可能出问题:
infra
是否充满了项目,ToString()
之后是否包含正确的字符串,headerName
是否正常。您应该能够通过调试检查所有三个步骤。
Romasz 建议您的方式是正确的,但您也可以使用下面的方法来解决您的问题。
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string headerName;
if (NavigationContext.QueryString.TryGetValue("goto", out headerName))
{
for (var i = 0; i < infra.Items.Count; i++)
{
if (((PivotItem)infra.Items[i]).Header == headerName)
{
infra.SelectedIndex = i;
break;
}
}
}
base.OnNavigatedTo(e);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.