【问题标题】:Adding , removing items to and from a ListBox after binding绑定后在 ListBox 中添加、删除项目
【发布时间】:2014-08-25 21:28:55
【问题描述】:

在以下按钮事件中,我将项目从另一个列表添加到列表中。

    private void btnAdd_Click(object sender, EventArgs e)
    {
        if (lstPermissions.SelectedItem != null)
        if (!lstGivenPermissions.Items.Contains(lstPermissions.SelectedItem))
        {
            lstGivenPermissions.Items.Add(lstPermissions.SelectedItem);
        }
    }

当项目在lstPermissionslstGivenPermissions 中硬编码时,datasource 没有设置,这很好。但是在将数据绑定到lstGivenPermissions 之后,当我尝试执行这个方法时,我得到了这个异常。

设置 DataSource 属性时无法修改项目集合。

我正在使用此属性将数据绑定到lstGivenPermissions

    public List<string>  GivenPermission
    {
        get { return lstGivenPermissions.Items.Cast<string>().ToList(); }
        set { lstGivenPermissions.DataSource = value; }
    }

我可以理解是数据绑定导致了这个异常。但我的要求是我想将所有权限加载到lstPermissions 并从数据库中选择用户对lstGivenPermission 的权限。然后我应该能够在lstGivenPermissions 中添加和删除项目。你能告诉我怎么做吗?

【问题讨论】:

  • 您似乎在设置 DataSource 属性后尝试修改 ListBox.Items 集合。您不能将其绑定到 ObservableCollection 并在所述集合上添加/删除项目。
  • 不确定ObservableCollection是不是winforms的正确方法,但@RodrigoSilva是对的,不要删除项目,调用底层数据源提供者的方法Delete(查看模型在 wpf 中),然后更新数据并以某种方式通知 UI 更改(从未在 winforms 中使用绑定,抱歉)。
  • 如果你的控件是数据绑定的,你必须通过改变底层数据源的数据来改变它的内容

标签: c# .net winforms data-binding listbox


【解决方案1】:

您不应该使用属性绑定到列表控件...属性应该只是保存/加载值,如下所示:

private List<string> _givenPermission;
public List<string>  GivenPermission
{
    get { return _givenPermission; }
    set { _givenPermission = value;}
}

如果您必须绑定,请尝试这样做:

private List<string> _givenPermission;
public List<string>  GivenPermission
{
    get { return _givenPermission; }
    set { _givenPermission = value; lstGivenPermissions.DataSource = value; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2013-07-07
    • 2012-03-19
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多