2014-09-11 65 views
0

当我尝试选择通过绑定源添加到列表框中的新项目时,出现此异常。ListBox在BindingSource更新后抛出ArgumentOutOfRangeException

这是自定义的数据源的BindingSource的对象

BindingSource bs = new BindingSource() { DataSource = myObjectsList }; 
listbox.DataSource = bs; 
listbox.DisplayMember = "MyObjectProperty"; 

当我添加一个新的项目到BindingSource的列表框更新,但我不能选择新项目

bs.Add(new MyObject()); 
int newItemIndex = listbox.Items.Count - 1; // this returns the right index of the new added item 
listbox.SelectedIndex = newItemIndex; 

这里我得到了System.ArgumentOutOfRangeException(InvalidArgument ='0'的值对'SelectedIndex'无效)。

如果我禁用系统异常中的调试中断,则prog公羊继续和项目被选中,但我不明白为什么我得到这个错误,如果列表框实际上有项目。

回答

1

发生该错误是因为在WPF中发生了异步事件。如果您试图通过将其指定为SelectedItem来选择新项目,您会发现它可能不会被选中。您可以在TabControl上查询有关此行为的问题。原因在于,仅仅因为您已将项目添加到数据源中,并不意味着该控件已在GUI中呈现并显示该项目。它需要做一些东西,如生成容器(大概ListBoxItem),如果没有发生,那么该项目还没有真正添加。所以当你设置SelectedIndex你会得到错误。

tl; dr:该项目尚未添加到GUI中,因此您的索引无效。仅仅因为后备系列有这个项目并不意味着它真的存在;-)

+0

谢谢你的回答,但我认为我的问题在这里有点不同:按照你的建议,我做了一些进一步的调试这就是我得到的:如果我添加了像所描述的新项目,并且我不以编程方式选择它,那么每当我选择它或离开它(在运行时),我总会得到该错误,就像该项目实际上不会不存在。 – 2014-09-12 08:03:28

+0

如果使用“SelectedItem”而不是“SelectedIndex”会发生什么? – Zache 2014-09-15 08:18:59