我希望能够将列表绑定(bind)到列表框数据源,并且在修改列表后,列表框的UI会自动更新。 (Winforms 不是 ASP)。这是一个示例:private List<Foo> fooList = new List<Foo>(); private void Form1_Load(object sender, EventArgs e) { //Add first Foo in fooList Foo foo1 = new Foo("bar1"); fooList.Add(foo1); //Bind fooList to the listBox listBox1.DataSource = fooList; //I can see bar1 in the listbox as expected } private void button1_Click(object sender, EventArgs e) { //Add anthoter Foo in fooList Foo foo2 = new Foo("bar2"); fooList.Add(foo2); //I expect the listBox UI to be updated thanks to INotifyPropertyChanged, but it's not }class Foo : INotifyPropertyChanged{ private string bar_ ; public string Bar { get { return bar_; } set { bar_ = value; NotifyPropertyChanged("Bar"); } } public Foo(string bar) { this.Bar = bar; } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } public override string ToString() { return bar_; }}如果我用 List<Foo> fooList = new List<Foo>(); 替换 BindingList<Foo> fooList = new BindingList<Foo>(); 那么它就可以工作了。但我不想改变原来的傻瓜类型。我想要这样的工作:listBox1.DataSource = new BindingList<Foo>(fooList);编辑:此外,我刚刚在这里阅读了 Ilia Jerebtsov 的 List<T> vs BindingList<T> Advantages/DisAdvantages :“当您将 BindingSource 的数据源设置为 List 时,它会在内部创建一个 BindingList 来包装您的列表”。我认为我的示例只是表明这不是真的:我的 List 似乎没有在内部包装到 BindingList 中。 最佳答案 您的示例中没有BindingSource。您需要像这样修改它以使用 BindingSource var bs = new BindingSource(); Foo foo1 = new Foo("bar1"); fooList.Add(foo1); bs.DataSource = fooList; //<-- point of interrest //Bind fooList to the listBox listBox1.DataSource = bs; //<-- notes it takes the entire bindingSource 编辑 请注意(正如评论中指出的那样)- bindingsource 不适用于 INotifyPropertyChanged关于c# - 将列表绑定(bind)到数据源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15141953/ 10-10 17:47