繁体   English   中英

C#将列表绑定到ListBox的正确方法

[英]C# Correct Way of Binding a List to a ListBox

假设我有以下代码:

        private List<Employee> displayEmp;

        public Form1()
        {
            InitializeComponent();
            displayEmp = new List<Employee>();
        }

在我的“添加按钮”处理程序中:

   private void button1_Click(object sender, EventArgs e)
        {
            string[] selection = comboEmail.GetItemText(comboEmail.SelectedItem).Split(',');

            Employee add = new Employee(Convert.ToInt32(selection[0]), selection[1], selection[2], selection[3]);

            if (!(comboEmail.SelectedIndex == 0))
            {

                if(!(listEmail.Items.Contains(add))){

                      displayEmp.Add(add);;
                      listEmail.DataSource = null;
                      listEmail.DataSource = displayEmp;
                }
                else
                {
                    MessageBox.Show(add.ToString() + " Already Added.");
                }

            }

        }

我的删除按钮处理程序:

private void button2_Click(object sender, EventArgs e)
{

    int indexRemoval = listEmail.SelectedIndex;

    if (indexRemoval != -1)
    {
        displayEmp.RemoveAt(indexRemoval);
        listEmail.DataSource = null;
        listEmail.DataSource = displayEmp;
    }

}

我在ComboBox中有一个员工列表,选中该列表后,我将其添加到列表框中。 在我的添加/删除按钮处理程序中,我是否正确执行了操作? 当您有一个集合绑定到一个控件,并且想要添加/删除项目时,什么是正确的做法?

是的,您正确绑定了收藏集。

我也会这样做:

listEmail.DisplayMember = "Name";

名称是要在列表框中显示的“雇员”中的任何属性,否则它将尝试将对象转换为字符串。

通常的做法是使用ObservableCollection<T>而不是List<T>

    private ObservableCollection<Employee> displayEmp;

    public Form1()
    {
        InitializeComponent();
        displayEmp = new ObservableCollection<Employee>();
        // you need to assign DataSource only once
        listEmail.DataSource = displayEmp;
    }

ObservableCollection实现INotifyCollectionChanged接口,该接口通知ListView集合中的所有更改(添加和删除intem)。 由于ObservableCollection会通知有关更改,因此您无需强制刷新绑定,因此不需要

    listEmail.DataSource = null;
    listEmail.DataSource = displayEmp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM