Я пытаюсь использовать BindingList
в качестве DataSource
для ListBox
в C # WinForms, но всякий раз, когда я пытаюсь добавить элементы в BindingList
, я получаю ArgumentOutOfRangeException
брошенный.Следующий код демонстрирует проблему (примите форму с ListBox listBox1
):
BindingList<string> dataSource = new BindingList<string>();
listBox1.DataSource = dataSource;
dataSource.Add("Test1"); // Exception, here.
Обратите внимание, что если в dataSource
уже есть элементы, я не получаю исключение:
BindingList<string> dataSource = new BindingList<string>();
dataSource.Add("Test1");
listBox1.DataSource = dataSource;
dataSource.Add("Test2"); // Appears to work correctly.
Я могу обойти эту проблему, установив для свойства DataSource
значение null
перед добавлением элемента и заново установив DataSource
после этого, но это похоже на хак, и я хотел бы иметь возможностьчтобы избежать этого.
Есть ли (не взломанный) способ использовать пустой DataSource
на ListBox
, чтобы при добавлении элементов к нему не создавались исключения?
Редактировать : Трассировка стека:
System.Windows.Forms.dll! System.Windows.Forms.ListBox.SelectedIndex.set (значение int) + 0x1ec байт
System.Windows.Forms.dll! System.Windows.Forms.ListControl.DataManager_PositionChanged (отправитель объекта, System.EventArgs e) + 0x2e байт
System.Windows.Forms.dll! System.Windows.Forms.CurrencyManager.OnPositionChanged (System.EventArgs e) + 0x39 байт
System.Windows.Forms.dll! System.Windows.Forms.CurrencyManager.ChangeRecordState (int newPosition, проверка bool, bool endCurrentEdit, bool firePositionChange, bool pullData) + 0x14f байт
System.Windows.Forms.dll! System.Windows.Forms.CurrencyManager.List_ListChanged (объекта отправителяe) + 0x2e4 байта
System.dll! System.ComponentModel.BindingList.OnListChanged (System.ComponentModel.ListChangedEventArgs e) + 0x17 байтов
System.dll! System.ComponentModel.BindingList.FireListLedCedCedComтип, индекс int) + 0x35 байт
System.dll! System.ComponentModel.BindingList.InsertItem (индекс int, System ._ элемент Canon) + 0x3f байт
mscorlib.dll! System.Collections.ObjectModel.Collection.Add (System. _Canon item) + 0x76 байт