首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListBox缺失

ListBox缺失
EN

Stack Overflow用户
提问于 2016-01-22 20:41:30
回答 1查看 99关注 0票数 0

我有一个列表框,有两个按钮,新的和删除。new将项添加到列表框中,删除按钮应将项目从列表框中删除。列表框项绑定到一个类,该类存储用户从下面的文本框输入的数据。

代码语言:javascript
复制
 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项是组合框,其数据在条件类中绑定到列表框的每个实例。

代码语言:javascript
复制
 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();


    }

按下这个删除按钮,列表框,仍然包含我想删除的项目,我不知道为什么会这样?

用数据源进行更新

代码语言:javascript
复制
 public List<Condition> NetConditions { get { return _netconditions; } }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-22 21:34:47

如前所述,您应该绑定到BindingList<Condition>而不是List<Condition>。这允许您更改数据源和控件(ListBox)以获得更改的通知。代码应该如下所示:

代码语言:javascript
复制
lstCondition.ValueMember = "ConditionId";
lstCondition.DisplayMember = "Name";
lstCondition.DataSource = NetConditions;

定义绑定之后,对ListBox项进行操作的正确方法是从datasource中删除,而不是从ListBox本身中删除:

代码语言:javascript
复制
// SelectedItem should be checked for null (no selection is an option)
NetCondition.Remove((Condition)lstCondition.SelectedItem);

但是,如果计划从元素(所以,而不是列表本身)更改属性,则只有当元素(条件)实现INotifyPropertyChanged接口时才通知控件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34955598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档