C# 基础ObservableCollection更改时组合框项不更新

C# 基础ObservableCollection更改时组合框项不更新,c#,winforms,C#,Winforms,我有一个组合框和一个可观察集合设置为数据源,用于该组合框 当我以编程方式从可观察的集合中添加/删除项时,组合框中没有任何更改 我做错了什么? 第2部分:尝试将BindingSource作为observateCollection的代理。当以编程方式从ObservableCollection中添加/删除项目时,不会触发类似ListChanged或类似事件。 如何使组合框在基础集合更改时自动更新其列表 public Form1() { InitializeCompone

我有一个
组合框
和一个
可观察集合
设置为
数据源
,用于该
组合框

当我以编程方式从可观察的集合中添加/删除项时,
组合框中没有任何更改
我做错了什么?
第2部分:尝试将
BindingSource
作为
observateCollection
的代理。当以编程方式从
ObservableCollection
中添加/删除项目时,不会触发类似
ListChanged
或类似事件。
如何使组合框在基础集合更改时自动更新其列表

    public Form1()
    {
        InitializeComponent();

        comboBox1.DataSource = new ObservableCollection<MyItem>(
            new []
            {
                new MyItem() { Name = "AAA"},
                new MyItem() { Name = "BBB"},
            });
    }

    private void Button3_Click(object sender, EventArgs e)
    {
        // Nothing changes in the ComboBox when I add a new item to ObservableCollection
        ((ObservableCollection<MyItem>)(comboBox1.DataSource))
            .Add(new MyItem() { Name = Guid.NewGuid().ToString()});
    }
}

public class MyItem
{
    public string Name { get; set; }
}
public Form1()
{
初始化组件();
comboBox1.DataSource=新的ObservableCollection(
新[]
{
新建MyItem(){Name=“AAA”},
新建MyItem(){Name=“BBB”},
});
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
//当我向ObservableCollection添加新项时,组合框中没有任何更改
((ObservableCollection)(comboBox1.数据源))
.Add(new MyItem(){Name=Guid.NewGuid().ToString()});
}
}
公共类MyItem
{
公共字符串名称{get;set;}
}

将列表包装在
绑定列表中有帮助。下面是一些测试代码:

public partial class Form1 : Form
{
    private readonly List<string> _coll = new List<string> { "aaaaa", "bbbbb", "ccccc" };
    private readonly BindingList<string> _blist;
    private readonly Random _rand = new Random();
    private const string Templ = "mcvnoqei4yutladfffvtymoiaro875b247ytmlarkfhsdmptiuo58y1toye";

    public Form1()
    {
        InitializeComponent();
        _blist = new BindingList<string>(_coll);
        comboBox1.DataSource = _blist;
    }

    private void AddButton_Click(object sender, EventArgs e)
    {
        int i = _rand.Next(Templ.Length - 5);
        string s = Templ.Substring(i, 5);
        _blist.Add(s);
    }
}
公共部分类表单1:表单
{
私有只读列表_coll=新列表{“AAAA”、“bbbbb”、“ccccc”};
私有只读绑定列表_blist;
private readonly Random_rand=new Random();
private const string temp=“MCVNOQEI4YUTLADFFFVTYMOIARO875B247YTMLAKFHSDMPIOU58Y1TOYE”;
公共表格1()
{
初始化组件();
_blist=新绑定列表(_coll);
comboBox1.DataSource=\u blist;
}
私有void AddButton\u单击(对象发送者,事件参数e)
{
int i=_rand.Next(模板长度-5);
字符串s=模板子字符串(i,5);
_blist.Add(s);
}
}

请注意,您必须对
绑定列表
进行更改(添加、删除等)。
BindingSource
的工作方式相同。

您设置了数据源吗?另外,请在此处发布您的代码。如果使用ObservableCollection代替BindingList,为什么不起作用?请注意,我的代码段使用的是
BindingList
,而不是
BindingSource
ObservableCollection
是主要用于WPF的较新集合。在旧版winforms中似乎没有考虑到它。好的,最终BindingList只起到了预期的作用。接受答案。我对MSDN不太准确感到失望。