![](/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.