【问题标题】:Changing ListBox ItemsSource property while item is selected results in IndexOutOfRange Exception选择项目时更改 ListBox ItemsSource 属性会导致 IndexOutOfRange 异常
【发布时间】:2010-11-01 21:36:57
【问题描述】:

如果我在选择项目时更改 ListBoxItemsSource 属性,则会收到 IndexOutOfRange 异常,因为在选择项目时设置了 SelectedIndex 属性。如果在ListBox 中未选择任何项目,则不会引发异常,但即使我在更改ItemsSource 之前将SelectedItem 属性设置为null,如果选择了项目,异常仍然会发生,因为SelectedIndex 属性仍然具有值.

这个问题有解决方案吗?

编辑:这是示例代码,因为仅当我在我的 LINQ to objects 表达式中应用 Contains 过滤器并且在 ListBox 中选择了一个项目时才会出现此问题... MyList 是 CLR 对象的 List<>。 ..

lstMyList.ItemsSource = MyList.Where(i => i.TypeId == 1);

效果很好。这个修改后的 LINQ 查询也可以正常工作(如果没有选择任何项目),但如果选择了一个项目,我会得到 IndexOutOfRangeException

lstMyList.ItemsSource = MyList.Where(i => i.TypeId == 1 && i.DisplayName.Contains(someString));

如果我将此 LINQ 查询重定向到 var 或 CLR 对象列表,则查询工作正常,但当我尝试将其设为 ListBox 的 ItemsSource 时,我得到异常(即使我创建了此 var 或 CLR 列表我的 ListBox 的对象 ItemsSource 代替)。

【问题讨论】:

  • 你能写出异常跟踪吗!

标签: c# wpf .net-4.0


【解决方案1】:

只需将SelectedIndex 设置为 -1


编辑:好的,试试吧:

listBox.ClearValue(Selector.SelectedIndexProperty);

【讨论】:

  • 试过了,但没用,我在那行得到 IndexOutOfRange 异常...有趣的是,只要没有选择一个项目 SelectedIndex = -1 就不会抛出异常.
  • 这也会产生 IndexOutOfRangeException。
猜你喜欢
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
相关资源
最近更新 更多