Подтвердить что ты не робот

Вопрос, связанный с Winforms

Я относительно новичок в привязке к выигрышным формам. Для изучения предмета я настраиваю следующее тестовое приложение. Базовая winform с ListBox и a Button.

public partial class Form1 : Form
{
    public List<String> stringList = new List<String>();

    public Form1()
    {
        InitializeComponent();
        stringList.Add("First");
        listBox1.DataSource = stringList;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        stringList.Add("Second");
    }
}

Строка "Первая" отображается в listBox1 при запуске приложения. Однако, когда я нажимаю кнопку, которая добавляет новую строку в stringList, новый элемент не отображается в listBox1. Может ли кто-нибудь помочь мне понять основы привязки данных коллекции?

4b9b3361

Ответ 1

Замените List<String> на BindingList<String>.

BindingList class можно использовать в качестве базового класса для создания механизма двусторонней привязки данных. BindingList предоставляет конкретную, общую реализацию интерфейса IBindingList.

List<T> класс не предоставляет никаких уведомлений об изменениях коллекции. Поэтому нет способа ListBox знать, что добавлен новый элемент. Однако, если вы используете коллекцию, которая реализует интерфейс IBindingList, ListBox подписывается на ListChanged событие. Это то, как он знает, когда нужно обновить себя.