Обязательный вопрос Winforms - PullRequest
13 голосов
/ 16 июня 2011

Я относительно новичок в привязке в выигрышных формах. Для изучения предмета я настроил следующее тестовое приложение. Базовая winform с ListBox и 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");
    }
}

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

1 Ответ

13 голосов
/ 16 июня 2011

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

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

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

...