【发布时间】:2011-08-17 13:33:42
【问题描述】:
我有两个列表。第一个是硬编码的,内容永远不会改变。第二个可以由用户编辑添加、更改和删除项目:
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,然后我必须在我的代码中进行处理(暂时记住当前项,之后将其恢复等)。这一切都变得非常混乱,我相信有一个聪明的方法可以解决这个问题。有吗?
谢谢,安迪
更新:我不想以第三方程序集的形式为此添加更多代码和复杂性,所以我只是继续我的混乱方法。谢谢。
【问题讨论】: