将ComboBox绑定到C#中的两个列表

时间:2011-08-17 13:33:43

标签: c# winforms binding

我有两个清单。第一个是硬编码的,内容永远不会改变。用户可以编辑第二个来添加,更改和删除项目:

public List<Item> DefaultItems = new List<Item>();
public BindingList<Item> UserItems = new BindingList<Item>();
...
MyTable.DataSource = UserItems;

我想将两个列表的内容一个接一个地绑定到ComboBox,并在用户编辑UserItems列表时自动更新。

我可以通过以下方式轻松解决第一部分:

public List<Items> AllItems
{
    get
    {
        List<Item> Items = new List<Item>();
        foreach (Item I in DefaultItems) Items.Add(I);
        foreach (Item I in UserItems) Items.Add(I);
        return Items;
    }
}
...
MyComboBox.DataSource = AllItems;

问题是当UserItems发生变化时,没有任何通知表明AllItems已经改变,因此组合框的内容保持不变。

然后我添加了一个在UserItems更改时生成的事件。现在我的问题是如何强制ComboBox刷新。执行以下操作:

MyComboBox.DataSource = null;
MyComboBox.DataSource = AllItems;

导致selecteditem变为null并且selectedindex变为-1,然后我必须在我的代码中处理(暂时记住当前项目,之后恢复它等)。这一切都变得非常混乱,我确信有一种聪明的方法可以解决这个问题。有吗?

谢谢,安迪

更新:我不想以第三方程序集的形式为此添加更多代码和复杂性,所以我只是继续我的凌乱方法。感谢。

1 个答案:

答案 0 :(得分:2)

您需要使用一个集合,该集合将在更改集合时通知UI。

您可以使用.NET提供的BindingList类,或者,如果您想尝试不同的东西,可以下载包含现有集合的BindingListView类,并为UI提供通知它需要。