更改ListBox在Windows Phone 7中选择的项目

时间:2011-07-12 17:25:29

标签: list windows-phone-7 listbox selecteditem

我需要从包含我班级对象的列表框中选择一个项目。这是我的代码:

加载事件:

  private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
  {
      XDocument loadedData = XDocument.Load("file.xml");
      var data = from query in loadedData.Descendants("element")
                 select new myClass
                 {
                     First = (string)query.Element("first"),
                     Second = (string) query.Element("second")
                 };
      List<myClass> d = data.ToList<myClass>();
      myList = d; 
      myListBox.ItemsSource = data;            
  }

然后我的按钮应该更改所选项目:

  private void button1_Click(object sender, RoutedEventArgs e)
  {
      myListBox.SelectedItem = myList[100];
  }
我在这里做错了吗?

3 个答案:

答案 0 :(得分:1)

myList不是您绑定到列表的集合 要使d更宽的范围变量,请参考button1_click中的变量 或
data存储在myList而不是其副本中。

答案 1 :(得分:0)

为了提高效率,我将ItemsSource设置为'd'而不是'data'。 linq查询返回的枚举是惰性的,因此每次UI更新时都会对其进行评估。您热切地创建了您拥有的数组,因此以后的查找速度很快。

答案 2 :(得分:0)

这里看起来像个小虫子。我能够不断地复制类似的问题。

我将标准VS模板用于数据绑定应用程序。该模板附带一些示例数据和一个填充的列表框。我添加了一个按钮,将所选项目设置为集合中的第15个项目。这按预期工作。但是,当我将列表向上滚动到顶部时,单击按钮时它不会返回到第15条记录。在这里猜测,你遇到的是同一问题的另一个症状。

要解决此问题,我首先将SelectedIndex设置为-1,这实际上取消了该项的选择。

private void button1_Click(object sender, RoutedEventArgs e)
{
    myListBox.SelectedIndex = -1;
    myListBox.SelectedItem = myList[100];
}

我很好奇这是否也解决了你的问题。