【发布时间】: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);
}
}
当项目在lstPermissions 和lstGivenPermissions 中硬编码时,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