我需要从包含我班级对象的列表框中选择一个项目。这是我的代码:
加载事件:
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];
}
我在这里做错了吗?
答案 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];
}
我很好奇这是否也解决了你的问题。