【问题标题】:Change ListBox's selected Item in Windows phone 7在 Windows phone 7 中更改 ListBox 的选定项
【发布时间】:2011-10-03 20:18:56
【问题描述】:

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

加载事件:

  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];
  }

我在这里做错了吗?

【问题讨论】:

    标签: list windows-phone-7 listbox selecteditem


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这里看起来像一个小错误。我能够不定期地复制类似的问题。

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

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

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

      我很好奇这是否也能解决您的问题。

      【讨论】:

        【解决方案3】:

        myList 不是您绑定到列表的集合。
        要么使 d 成为范围更广的变量,并在 button1_click
        中引用它 或
        data 存储在 myList 中,而不是它的副本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多