У меня есть список привязок, который при определенных трудно воспроизводимых условиях выдает следующее исключение при добавлении к нему значения:
System.ArgumentException: комплексная привязка данных принимает в качестве источника данных либо IList, либо IListSource.
at System.ComponentModel.ReflectPropertyDescriptor.SetValue (компонент объекта, значение объекта)
в System.Windows.Forms.Binding.SetPropValue (значение объекта)
в System.Windows.Forms.Binding.PushData (логическая сила)
в System.Windows.Forms.BindingManagerBase.PushData (Boolean & success)
в System.Windows.Forms.BindingManagerBase.PushData ()
в System.Windows.Forms.CurrencyManager.CurrencyManager_PushData ()
в System.Windows.Forms.CurrencyManager.OnItemChanged (ItemChangedEventArgs e)
в System.Windows.Forms.CurrencyManager.List_ListChanged (Отправитель объекта, ListChangedEventArgs e)
at System.ComponentModel.ListChangedEventHandler.Invoke (Отправитель объекта, ListChangedEventArgs e)
at System.ComponentModel.BindingList 1.OnListChanged(ListChangedEventArgs e)<br>
at System.ComponentModel.BindingList
1.InsertItem (индекс Int32, элемент T)
at System.Collections.ObjectModel.Collection`1.Add (T item)
...
Я мог бы понять, происходило ли это при создании списка или изменении одного из свойств, но это происходит только при добавлении в него определенных значений. Объявлено так:
private BindingList<IBusinessObject> _bindingList = new BindingList<IBusinessObject>();
А затем используется позже так (вот где выдается исключение):
_bindingList.Add(myBusinessObject);
Что еще хуже, это происходит в ранее работающем рабочем коде, где ни один из приведенных здесь кодов не был отредактирован в последнее время. У меня есть подозрение, что это какая-то тонкая проблема взаимодействия с данными, и поэтому она происходит нечасто, но, честно говоря, я в растерянности, поскольку исходная точка исключения находится глубоко внутри .Net.
Обновление :
На самом деле это не отдельная форма, а скорее объектная модель, используемая для поддержки нескольких форм / диалогов. Это очень сложный код, а не код, который я написал, а просто поддерживающий / улучшающий. После ознакомления с кодом, похоже, что BindingList добавляется к еще нескольким объектам домена и в конечном итоге используется для заполнения ImageListBox с использованием свойства строки объекта. Рассматриваемая строка никогда не должна быть нулевой или пустой, но из-за того, где находится код и трудно воспроизвести ошибку, связанную с проверкой отладчика, будет проблематично. Может ли нулевое значение заставить BindingList выдавать исключение в таком удаленно удаленном месте, из которого фактически находится проблема? Этот объект буквально вставляется в 3 или 4 других объекта / коллекции до того, как его в конечном итоге назначают в качестве источника данных для рассматриваемого списка ImageListBox (и даже в этом случае он зависит от пары других вариантов выбора того, какой именно из объектов BindingList в конечном итоге является используется для заполнения списка).