C# 更新组合框绑定(bind)到通用列表

标签 c# combobox datasource generic-list

我的表单上有一个组合框,它绑定(bind)到一个通用的字符串列表,如下所示:

private List<string> mAllianceList = new List<string>();

private void FillAllianceList()
{
    // Add alliance name to member alliance list
    foreach (Village alliance in alliances)
    {
        mAllianceList.Add(alliance.AllianceName);
    }

    // Bind alliance combobox to alliance list
    this.cboAlliances.DataSource = mAllianceList;
}

然后用户可以在组合框中添加或删除项目。
我在别处读到,通过简单地添加或删除通用列表中的项目,组合框的内容应该会自动更新;如果我在上面使用 Sort(),也会发生同样的事情。
但出于某种原因,我无法完成这项工作。当我添加/删除/排序项目时,我可以看到组合框的 DataSource 属性已正确更新,但组合框中显示的内容不是 DataSource 属性中的内容。

我肯定遗漏了什么或做错了什么。
提前致谢!

编辑:
我选择的答案解决了添加和删除的问题,但是无法对 BindingList 对象进行排序,这对我来说是必需的。我找到了一个解决方案,其中通过继承 BindingList 并添加排序功能来构建自定义类,但我想知道在我的案例中是否有更简单的解决方案。
关于如何轻松解决这个问题有什么建议吗?

最佳答案

解决此问题的最简单方法是像这样简单地使用 BindingList:

private List<string> mAllianceList = new List<string>();
private BindingList<string> bindingList;    

private void FillAllianceList()
{
    // Add alliance name to member alliance list
    foreach (Village alliance in alliances)
    {
        mAllianceList.Add(alliance.AllianceName);
    }

    bindingList = new BindingList<string>(mAllianceList);

    // Bind alliance combobox to alliance list
    this.cboAlliances.DataSource = bindingList;
}

然后,从这里开始,只需处理绑定(bind)列表即可从那里添加和删除项目。这将从列表和组合框中删除它。

编辑:为了回答你关于排序的问题,我想最简单的(但可能是“hacky”的方法是这样的:

mAllianceList.Sort();
bindingList = new BindingList<string>(mAllianceList);
this.cboAlliances.DataSource = bindingList;

所以基本上,在排序之后,您创建了一个新的绑定(bind)列表并重置了数据源。也许有更优雅的方法来解决这个问题,但这应该可行。

关于C# 更新组合框绑定(bind)到通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433281/

相关文章:

c# - 用于使用 C#、C++/CLI 和非托管 C++ 的应用程序的内存分析工具

c# - 使用私有(private)字段或 DependencyProperty 支持绑定(bind)属性有什么区别?

javascript - 在运行时设置 extjs 6 组合框的存储数据会导致显示错误

javascript - 设置仅包含单个对象的 SC.DataSource

c# - web.config 转换 - 从 connectionstring 部分删除注释

c# - 为什么在 C# 命名空间中会隐藏以命名空间名称的中间元素开头的其他命名空间?

ruby-on-rails - Ruby:我怎样才能制作一个显示的组合框

c# - 如何将 ComboBox 绑定(bind)到一列列表

c# - MySQL与asp.net的控制

rest - HTTP 状态代码 当出现 java.sql.SQLException 时