我有一个ComboBox
和一个ObservableCollection
设置为DataSource
的一个ComboBox
。
当我以编程方式从可观察的集合中添加/删除项目时,ComboBox
中没有任何变化。
我在做什么错了?
第2部分:尝试将BindingSource
用作ObservableCollection
的代理。以编程方式从ObservableCollection
添加/删除项目时,不会触发类似ListChanged
或类似事件的事件。
基础集合更改时,如何使ComboBox
自动更新其列表?
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; }
}
答案 0 :(得分:1)
这有助于将列表包装在BindingList<T>
中。这里是一些测试代码:
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);
}
}
请注意,您必须对BindingList
进行更改(添加,删除等)。 BindingSource
的工作方式相同。