2

我有一个 C# winform,它使用带有数据源绑定列表的列表框。该列表是从计算机上的文本文件创建的。我正在尝试为此列表框创建一个“全部删除”按钮,但遇到了一些麻烦。

首先,这里是相关代码:

private void btnRemoveAll_Click(object sender, EventArgs e)
    {
        // Use a binding source to keep the listbox updated with all items
        // that we add
        BindingSource bindingSource = (BindingSource)listBox1.DataSource;

        // There doesn't seem to be a method for purging the entire source,
        // so going to try a workaround using the main list.
        List<string> copy_items = items;
        foreach (String item in copy_items)
        {
            bindingSource.Remove(item);
        }
    }

我试过 foreaching bindingSource,但它给出了一个枚举错误并且不起作用。据我所知,没有代码可以只清除整个源,所以我尝试通过列表本身并通过项目名称删除它们,但这也不起作用,因为 foreach 实际上返回了一个对象或其他东西不是字符串。

关于如何做到这一点的任何建议?

4

2 回答 2

10

你可以直接输入

listBox1.Items.Clear();
于 2013-05-12T12:53:28.443 回答
3

如果您使用一些通用列表将列表框绑定到 BindingSource,那么您可以这样做:

BindingSource bindingSource = (BindingSource)listBox1.DataSource;
IList SourceList = (IList)bindingSource.List;

SourceList.Clear();

另一方面,在您的 Form、Viewmodel 或任何可以解决问题的东西中保存对底层列表的引用。

编辑:这仅在您的列表是 ObservableCollection 时才有效。对于普通列表,您可以尝试在 BindingSource 上调用 ResetBindings() 以强制刷新。

于 2013-04-26T15:32:41.473 回答