Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择项时更改ListBox ItemsSource属性会导致IndexOutFrange异常_C#_Wpf_.net 4.0 - Fatal编程技术网

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。