簡體   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