窗体具有一个组合框和一个列表框。单击“添加”按钮时,我想将选定的项从ComboBox添加到ListBox。
public partial class MyForm:Form { List<MyData> data = new List<MyData>(); private void ShowData() { listBox1.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); ShowData(); } }
在此示例中,所选项目将替换为ListBox中的新选择。我需要将该项目添加到列表中。
我的代码有什么问题?
listbox1.DataSource 属性会寻找值的更改,但是通过始终分配相同的列表,值不会真正更改。
listbox1.DataSource
您可以使用BindingList<T>而不是List<T>来自动识别添加的新项目。您的ShowData()方法必须在启动时被调用一次。
BindingList<T>
List<T>
public partial class MyForm:Form { public MyForm(){ InitializeComponent(); ShowData(); } BindingList<MyData> data = new BindingList<MyData>(); private void ShowData() { listBox1.DataSource = data; listBox1.DisplayMember = "Name"; listBox1.ValueMember = "Id"; } private void buttonAddData_Click(object sender, EventArgs e) { var selection = (MyData)comboBox1.SelectedItem; data.Add(selection); } }