Подключить Список к ListBox и увидеть изменения источника данных в ListBox

Я хочу, чтобы ListBox автоматически показывал изменения, когда я удаляю или добавляю объект в список, который я использую в качестве своего DataSource .

Как подключить List к ListBox и сразу увидеть изменения базового списка в ListBox ?

В Windows Forms в сценарии, который вы хотите увидеть изменения источника данных в элементе управления связанным списком, например ComboBox , ListBox или DataGridView (сложная двусторонняя привязка данных), вы должны использовать class, который реализует интерфейс IBindingList как DataSource данных связывание. Наиболее подходящей BindingList является BindingList . Таким образом, каждый элемент add / remove в базовом источнике данных вашего элемента управления будет сразу виден в элементе управления.

Имейте в виду, что использование BindingList позволяет связанным элементам управления видеть добавленные или удаленные элементы, но чтобы сразу увидеть изменения свойств, T должен реализовать INotifyPropertyChanged . Таким образом, ваши средства управления будут уведомлены PropertyChanged и всегда будут показывать свежие данные.

Примечание 1. Наблюдает ли ObservableCollection двустороннюю привязку данных Probelm?

В Windows Form распространенной ошибкой является использование ObservableCollection , которое не будет работать для этого требования, поскольку оно не реализует IBindingList .

Примечание 2 – BindingSource решает проблему двусторонней передачи данных?

Если базовый источник данных BindingSource не реализует IBindingList он не решает проблему двусторонней передачи данных. Вам необходимо уведомить элементы управления, чтобы перезагрузить данные из источника привязки, поэтому вы можете вызвать метод ResetBindings для BindingSource . Таким образом, связанные элементы управления будут перезагружать данные из источника данных и показывать последние данные:

 this.bindingSource1.ResetBindings(false); 

Примечание 3 – Я должен использовать List . Как я могу решить проблему, используя List ?

Если вы должны использовать List , вы можете сбросить привязку данных своего списка, если вам нужно, например, после каждого изменения вы должны назначить свой DataSource нулевым и снова в список данных:

 this.listBox1.DataSource = null; this.listBox1.DataSource = list; 

См. Следующий пример, в котором список строк передается в экземпляр listBox.

 public partial class Form1 : Form { List _items = new List(); // <-- Add this public Form1() { InitializeComponent(); _items.Add("One"); // <-- Add these _items.Add("Two"); _items.Add("Three"); listBox1.DataSource = _items; } } 
  • Проходные события мыши для родительского контроля
  • Как удалить фокус из TextBox в WinForms?
  • DataGridView привязан к словарю
  • Как реализовать MVC в приложении Windows Forms?
  • Winforms-Как я могу создать MessageBox в центре MainForm?
  • Выполняется ли в System.Windows.Forms.Timer другой stream, чем пользовательский интерфейс?
  • Используя C # для поиска файла CSV и потяните значение в столбце рядом с ним
  • Порядок событий «Form.Load», «Form.Shown» и «Form.Activated» в Windows Forms
  • Показывать экран всплеска во время загрузки основной формы
  • Использование FileSystemWatcher для мониторинга каталога
  • Как повернуть изображение в WinForms
  • Давайте будем гением компьютера.