2014-09-11 97 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

相關問題