我有一個綁定列表時,在某種難以複製的條件拋出以下異常,當值被添加到它:爲什麼的BindingList拋出System.ArgumentException添加成員
系統.ArgumentException:複雜DataBinding接受作爲數據源的IList或IListSource。 在System.ComponentModel.ReflectPropertyDescriptor.SetValue(對象部件,對象的值)
在System.Windows.Forms.Binding.SetPropValue(對象的值)
在System.Windows.Forms.Binding.PushData(布爾力)
在System.Windows.Forms.BindingManagerBase.PushData(布爾&成功)
在System.Windows.Forms.BindingManagerBase.PushData()
在System.Windows.Forms.CurrencyManager.CurrencyManager_PushData()
在System.Windows。 Forms.CurrencyManager.OnItemChanged(ItemChangedEventArgs e)
at System.Windows.Forms.Cu rrencyManager.List_ListChanged(對象發件人,ListChangedEventArgs E)
在System.ComponentModel.ListChangedEventHandler.Invoke(對象發件人,ListChangedEventArgs E)
在System.ComponentModel.BindingList1.OnListChanged(ListChangedEventArgs e)
1.InsertItem(的Int32索引,T項)
at System.ComponentModel.BindingList
在系統.Collections.ObjectModel.Collection`1.Add(T項目)
...
我能理解,如果它創建列表時,或改變性質的一個發生了什麼,但是這隻有在發生添加一些值。它的聲明如下所示:
private BindingList<IBusinessObject> _bindingList = new BindingList<IBusinessObject>();
再後來使用像這樣(這是異常被拋出,其中):
_bindingList.Add(myBusinessObject);
更糟糕的是,這是在以前的工作生產代碼中存在的,其中沒有這裏涉及的代碼最近被編輯過了。我懷疑這是一些微妙的數據交互問題,這也是它不經常發生的原因,但坦率地說,我很遺憾,因爲例外的起源點在.Net內部深處。
更新: 它實際上不是一個單一的形式,而是用於支持多個表單/對話框的對象模型的一部分。這是非常複雜的代碼,而不是我編寫的代碼,但只是維護/增強。在深入瞭解代碼之後,它看起來像BindingList被添加到更多的域對象,並最終用於使用對象的字符串屬性填充ImageListBox。問題中的字符串不應該爲空或空白,但由於代碼位於的位置以及難以重現附加調試器來驗證的錯誤會有問題。空值是否會導致BindingList在這個距離問題實際所在位置遠的地方拋出異常?這個對象在最終被分配爲所討論的ImageListBox列表的數據源之前,被直接插入到3個或4個其他對象/集合中(即使這樣,它也依賴於其他選擇來確定哪個BindingList對象最終是最終的用於填充列表)。