C# 选择项时更改ListBox ItemsSource属性会导致IndexOutFrange异常
如果在选择项目时更改C# 选择项时更改ListBox ItemsSource属性会导致IndexOutFrange异常,c#,wpf,.net-4.0,C#,Wpf,.net 4.0,如果在选择项目时更改列表框的ItemsSource属性,则会出现索引自动失效异常,因为选择项目时会设置SelectedIndex属性。如果在列表框中未选择任何项目,则不会引发异常,但即使我在更改项目资源之前将SelectedItem属性设置为null,由于SelectedIndex属性仍有值,因此如果选择了项目,仍会发生异常 这个问题有解决方案或解决方法吗 编辑:这是示例代码,因为只有在我的LINQ to objects表达式中应用Contains过滤器并且在列表框中选择了一个项目时,才会出现此
列表框的ItemsSource
属性,则会出现索引自动失效异常,因为选择项目时会设置SelectedIndex
属性。如果在列表框中未选择任何项目,则不会引发异常,但即使我在更改项目资源之前将SelectedItem
属性设置为null,由于SelectedIndex
属性仍有值,因此如果选择了项目,仍会发生异常
这个问题有解决方案或解决方法吗
编辑:这是示例代码,因为只有在我的LINQ to objects表达式中应用Contains
过滤器并且在列表框中选择了一个项目时,才会出现此问题。。。MyList是CLR对象的列表
lstMyList.ItemsSource = MyList.Where(i => i.TypeId == 1);
那很好。这个修改过的LINQ查询也可以正常工作(如果没有选择任何项目),但是如果选择了一个项目,我会得到indexootfrangeexception
lstMyList.ItemsSource = MyList.Where(i => i.TypeId == 1 && i.DisplayName.Contains(someString));
如果我将此LINQ查询重定向到var或CLR对象列表,则查询工作正常,但当我尝试将其作为列表框的ItemsSource时,会出现异常(即使我将此var或CLR对象ItemsSource列表改为ListBox)。只需将SelectedIndex设置为-1即可
编辑:好,改为尝试:
listBox.ClearValue(Selector.SelectedIndexProperty);
你能写下异常跟踪吗!我试过了,但没用,我在那条线上遇到了IndexOutfrange异常。。。有趣的是,只要一个项目没有被选中,SelectedIndex=-1就不会抛出异常。这也会生成IndexOutOfRangeException。