循环遍历数据透视项并检查标题wp8

本文关键字:检查 标题 wp8 遍历 数据 透视 循环 | 更新日期: 2023-09-27 18:04:32

我有一个名为"infra"的枢轴,我想循环遍历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动态创建pivot项目。这些按钮应该将用户带到特定的Pivot Item。按钮的"x:name"属性与pivot项目的标题相同。

循环遍历数据透视项并检查标题wp8

我不知道你为什么要比较索引(变量strItemIndex的名称)到Header。您可以使用SelecedIndex:

轻松切换数据透视项
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    string strItemIndex;
    if (NavigationContext.QueryString.TryGetValue("goto", out strItemIndex))
        infra.SelectedIndex = int.Parse(strItemIndex);
    base.OnNavigatedTo(e);
}

EDIT -在注释和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);
    }