使用 ObservableCollection 时更新列表框

本文关键字:列表 更新 ObservableCollection 使用 | 更新日期: 2023-09-27 17:55:12

我有一个绑定到列表框的 ObservableCollection,如下所示:

string[] selection = comboEmail.GetItemText(comboEmail.SelectedItem).Split(',');
Employee add = new Employee(Convert.ToInt32(selection[0]), selection[1], selection[2], selection[3]);
displayEmp.Add(add);
listEmail.DataSource = displayEmp;

它将数据添加到列表框(列表电子邮件),但是,删除后如何更新它。这是我到目前为止尝试过的:

int indexRemoval = listEmail.SelectedIndex;
displayEmp.RemoveAt(indexRemoval);
listEmail.DataSource = displayEmp;
//listEmail.Refresh();

但它不起作用。用户单击删除按钮后,我将如何更新列表?

使用 ObservableCollection 时更新列表框

您需要设置ItemSource而不是数据源。这假定您还设置了DataContext

listEmail.ItemSource = displayEmp;

由于您已将displayEmp定义为 ObservableCollection ,因此更新应自动反映。

编辑:下面是一个示例,供您参考,使用 BindingList 自动刷新 UI:

public BindingList<Data> DataList { get; set; }
public void Load()
{
    DataList = new BindingList<Data>
                   {
                        new Data
                            {
                                Key = "Key1",
                                Value = "Value1"
                            },
                        new Data
                            {
                                Key = "Key2",
                                Value = "Value2"
                            },
                        new Data
                            {
                                Key = "Key3",
                                Value = "Value3"
                            }
                    };
     listBox1.DataSource = DataList;
     listBox1.DisplayMember = "Value";
     listBox1.ValueMember = "Key";
}
public class Data
{
     public string Key { get; set; }
     public string Value { get; set; }
}   
private void button1_Click(object sender, EventArgs e)
{
    DataList.RemoveAt(1);
}