Подключить Список к ListBox и увидеть изменения источника данных в ListBox
Я хочу, чтобы ListBox
автоматически показывал изменения, когда я удаляю или добавляю объект в список, который я использую в качестве своего DataSource
.
Как подключить List
к ListBox
и сразу увидеть изменения базового списка в ListBox
?
- Как вы имитируете Mouse Click на C #?
- Как загрузить изображение с SQL Server в окно изображения?
- Как приостановить рисование для элемента управления и его детей?
- Скопировать значения DataGridView в TextBox
- ClickOnce и IsolatedStorage
- Форматирование текста в ярлыке WinForm
- Как сделать прозрачный прозрачный?
- Преодоление ограничений на доступ к ОС в Windows Минимальный размер
- C # WinForms - как я могу отобразить элемент управления загрузкой, пока процесс ожидает завершения. Im, используя «LoadingCircle» и Thread
- Как изменить Form1 label.text при установке флажка на form2?
- Выберите файл или папку из того же диалогового windows в .NET.
- Панель c # для рисования графики и прокрутки
- Как получить «дружественное» имя версии ОС?
В 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; } }