2009-05-21 9 views
1

ich eine verbindliche Liste habe, dass unter bestimmten Bedingungen schwer zu reproduzieren ist die folgende Ausnahme werfen, wenn ein Wert hinzugefügt wird:Warum Binding eine System.ArgumentException ausgelöst wird, wenn ein Mitglied Hinzufügen

-System .ArgumentException: Complex DataBinding akzeptiert als Datenquelle entweder eine IList oder eine IListSource. bei System.ComponentModel.ReflectPropertyDescriptor.SetValue (Object Komponente, Objektwert)
bei System.Windows.Forms.Binding.SetPropValue (Objektwert)
bei System.Windows.Forms.Binding.PushData (Boolean Kraft)
bei System.Windows.Forms.BindingManagerBase.PushData (Boolean & Erfolg)
bei System.Windows.Forms.BindingManagerBase.PushData()
bei System.Windows.Forms.CurrencyManager.CurrencyManager_PushData()
bei System.Windows. Forms.CurrencyManager.OnItemChanged (ItemChangedEventArgs e)
bei System.Windows.Forms.Cu rrencyManager.List_ListChanged (Object sender, ListChangedEventArgs e)
bei System.ComponentModel.ListChangedEventHandler.Invoke (Object sender, ListChangedEventArgs e)
bei System.ComponentModel.BindingList 1.OnListChanged(ListChangedEventArgs e)
at System.ComponentModel.BindingList
1.InsertItem (Int32 Index T Artikel)
bei System .Collections.ObjectModel.Collection`1.Add (T Artikel)
...

ich verstehen konnte, wenn es geschah, als der Erstellung der Liste oder eine der Eigenschaften zu ändern, aber dies nur geschieht, wenn Hinzufügen bestimmter Werte. Es erklärt ist wie folgt:

private BindingList<IBusinessObject> _bindingList = new BindingList<IBusinessObject>(); 

Und dann später wie so verwendet (das ist, wo die Ausnahme ausgelöst wird):

_bindingList.Add(myBusinessObject); 

Erschwerend kommt hinzu dies in vorher Arbeitsproduktionscode auftreten, wo keine des hier beteiligten Codes wurde kürzlich bearbeitet. Ich habe den Verdacht, dass dies ein subtiles Dateninteraktionsproblem ist, weshalb es auch selten passiert, aber ehrlich gesagt bin ich ratlos, da der Ursprung der Ausnahme tief in den Interna von .Net liegt.

aktualisieren: Es ist nicht wirklich eine einzige Form, sondern ein Stück des Objektmodells verwendet, um mehrere Formulare/Dialoge zurück. Es ist ein sehr komplexer Code, und kein Code, den ich geschrieben habe, sondern lediglich beibehalten/verbessere. Nach dem Durchsuchen des Codes sieht es so aus, als ob die BindingList zu einigen weiteren Domänenobjekten hinzugefügt wird und schließlich zum Auffüllen einer ImageListBox mit einer String-Eigenschaft des Objekts verwendet wird. Die fragliche Zeichenfolge sollte niemals null oder leer sein, sondern aufgrund dessen, wo sich der Code befindet und die Schwierigkeit, den Fehler zu reproduzieren, problematisch ist, wenn ein Debugger angehängt wird, um ihn zu verifizieren. Könnte ein Nullwert dazu führen, dass die BindingList eine Ausnahme an einem so entfernt entfernten Ort auslöst, an dem sich das Problem tatsächlich befindet? Dieses Objekt wird buchstäblich in 3 oder 4 andere Objekte/Sammlungen eingefügt, bevor es schließlich als Datenquelle der betreffenden Liste der ImageListBox zugewiesen wird (und selbst dann hängt es von einigen anderen Auswahlen ab, welche der BindingList-Objekte letztendlich genau ausgewählt werden) verwendet, um die Liste aufzufüllen).

Antwort

1

Es sieht so aus, als ob Sie die DataSource-Eigenschaft eines Listensteuerelements irgendeiner Art an eine Eigenschaft Ihres IBusinessObject gebunden haben, und diese Eigenschaft einen Wert zurückgibt, der nicht als DataSource gültig ist.Können Sie genauer auf alle Bindungen eingehen, die Sie in diesem Formular verwenden?

Verwandte Themen