【问题标题】:Get a SelectedItems's attribute and pass it to a new page in WP8获取 SelectedItems 的属性并将其传递到 WP8 中的新页面
【发布时间】:2014-03-17 19:43:34
【问题描述】:

我要做的是:当用户单击列表框中的项目时,我想获取项目的 ID 号,这是一个属性。然后我想将此 ID 传递到另一个页面,该页面将显示相关数据。

这是我必须尝试执行此操作的代码:

private void lstCats_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
        Pets selectedAnimal = lstCats.SelectedItem as Pets;
        NavigationService.Navigate(new Uri("/ViewPet.xaml?msg=" + selectedAnimal.ID, UriKind.Relative));
}

然后在我想要显示数据的第二页上,我有以下内容:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        string msg = "";

        if (NavigationContext.QueryString.TryGetValue("msg", out msg))
        {
            id = Convert.ToInt16(msg);

            DisplayDetails();
            DisplayImage();
        }
    }

据我所知,问题出在第一页,因为第二页在链接到其他页面时工作正常,我没有使用列表框等。

感谢任何帮助。谢谢。

编辑:我用来填充列表框的代码:

private void DisplayCats()
    {
        foreach (Pets temp in thisApp.pets)
        {
            if (temp.Category.Contains("Cat"))
            {
                Animal animal = new Animal() { Details = temp.Name + "\n" + temp.Category + " / " + temp.Subcategory + "\n€" + temp.Price.ToString(), ImageURI = temp.Image };
                lstCats.Items.Add(animal);
            }
        }
    }

【问题讨论】:

  • 能否提供用于绑定/填充dropdownlist 的代码?
  • 将其添加到原始问题中,干杯
  • 您将项目绑定到下拉列表为Animal,但稍后尝试将它们转换回Pet。那是行不通的。

标签: c# windows-phone-7 windows-phone-8 observablecollection


【解决方案1】:

我认为问题出在这一行:

Pets selectedAnimal = lstCats.SelectedItem as Pets;

这里的问题是,您的ListBox 控件具有将Animals 作为SelectedItems 的项目。您要做的是将ListBox 与宠物而不是物品绑定:

private void DisplayCats()
{
    foreach (Pets temp in thisApp.pets)
    {
        if (temp.Category.Contains("Cat"))
        {
            lstCats.Items.Add(temp);
        }
    }
}


更新

假设您要绑定Animal 对象,您可以执行以下操作:

private void DisplayCats()
{
    foreach (Pets temp in thisApp.pets)
    {
        if (temp.Category.Contains("Cat"))
        {
            //note that I added the ID property --v
            Animal animal = new Animal() { ID = temp.ID, Details = temp.Name + "\n" + temp.Category + " / " + temp.Subcategory + "\n€" + temp.Price.ToString(), ImageURI = temp.Image };
            lstCats.Items.Add(animal);
        }
    }
}

那么您的事件处理程序应该如下所示:

private void lstCats_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Animal selectedAnimal = lstCats.SelectedItem as Animal;
    NavigationService.Navigate(new Uri("/ViewPet.xaml?msg=" + selectedAnimal.ID, UriKind.Relative));
}

【讨论】:

  • 我很抱歉之前的混乱。我只是看错了帖子。此答案已更新以适合您的解决方案。如果您只是将您的 DisplayCats 方法更改为这个,它应该可以工作。
  • 谢谢。但是这样做并没有显示任何内容,我不确定它会如何?
  • 您的前端如何确定在ListBox 中显示Animal/Pet 对象的哪些属性?不管它做什么,更新它以在 Pets 类上找到相应的属性。
  • 除非您发布的用于创建Animal 对象的代码不完整,否则Animal 对象的IDs 应该为null 或其默认值。我会更新我的解决方案来解决这个问题,以防你忘记添加它。
  • 非常感谢!现在完美运行。
猜你喜欢
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多