![](/img/trans.png)
[英]WPF C# representing List of enums as ListBox and binding the value to combobox doesn't work two way
[英]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.