我有一个列表框,有两个按钮,新的和删除。new将项添加到列表框中,删除按钮应将项目从列表框中删除。列表框项绑定到一个类,该类存储用户从下面的文本框输入的数据。
private void AddListBox()
{
lstCondition.BeginUpdate();
Condition cond = new Condition("");
cond.Name = string.Format("Condition {0}", _selection.NetConditions.Count + 1);
_selection.NetConditions.Add(cond);
lstCondition.EndUpdate();
lstCondition.SelectedItem = cond;
cboNetCondition.Properties.Items.Clear();
cboNetCondition.Properties.Items.AddRange(NetCondition);
cboControlType.Properties.Items.Clear();
cboControlType.Properties.Items.AddRange(ControlType);
cboFlowRate.Properties.Items.Clear();
cboFlowRate.Properties.Items.AddRange(FlowRate);
}
private void btnNew_Click(object sender, EventArgs e)
{
AddListBox();
}cbo项是组合框,其数据在条件类中绑定到列表框的每个实例。
public frmNetConditions(Condition condo, Selection selection)
{
InitializeComponent();
_selection = selection;
lstCondition.DataSource = _selection.NetConditions;
condition = _selection.NetConditions.Count;
}
private void btnDelete_Click(object sender, EventArgs e)
{
selectedCondition = (Condition)lstCondition.SelectedItem;
cboControlType.SelectedIndex = -1;
cboNetCondition.SelectedIndex = -1;
cboFlowRate.SelectedIndex = -1;
txtFlowRate.Text = string.Empty;
txtStatPressure.Text = string.Empty;
txtDampOpening.Text = string.Empty;
txtDensity.Text = string.Empty;
cboDensity.SelectedIndex = -1;
lstCondition.Items.Remove(lstCondition.SelectedItem);
lstCondition.Refresh();
}按下这个删除按钮,列表框,仍然包含我想删除的项目,我不知道为什么会这样?
用数据源进行更新
public List<Condition> NetConditions { get { return _netconditions; } }发布于 2016-01-22 21:34:47
如前所述,您应该绑定到BindingList<Condition>而不是List<Condition>。这允许您更改数据源和控件(ListBox)以获得更改的通知。代码应该如下所示:
lstCondition.ValueMember = "ConditionId";
lstCondition.DisplayMember = "Name";
lstCondition.DataSource = NetConditions;定义绑定之后,对ListBox项进行操作的正确方法是从datasource中删除,而不是从ListBox本身中删除:
// SelectedItem should be checked for null (no selection is an option)
NetCondition.Remove((Condition)lstCondition.SelectedItem);但是,如果计划从元素(所以,而不是列表本身)更改属性,则只有当元素(条件)实现INotifyPropertyChanged接口时才通知控件。
https://stackoverflow.com/questions/34955598
复制相似问题