我的表单上有一个组合框,它绑定到一个通用的字符串列表,如下所示:
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和添加排序功能来构建自定义类,但我想知道在我的情况下是否有更简单的解决方案。
关于如何轻松解决这个问题的任何建议?
答案 0 :(得分:15)
最简单的方法是简单地使用像这样的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;
}
然后,从现在开始,只需处理绑定列表即可添加和删除项目。这将从List和ComboBox中删除它。
编辑:要回答关于排序的问题,我想最简单的(但可能是“hacky”)方式会是这样的:
mAllianceList.Sort();
bindingList = new BindingList<string>(mAllianceList);
this.cboAlliances.DataSource = bindingList;
所以基本上,排序后,您创建一个新的绑定列表并重置数据源。也许有一种更优雅的方式可以解决这个问题,但这应该可行。