我有一个代表客户的对象,该对象有一个客户分支列表:
private List<Branch> _branches;
[System.Xml.Serialization.XmlArray("Branches"), System.Xml.Serialization.XmlArrayItem(typeof(Branch))]
public List<Branch> Branches
{
get { return _branches; }
set
{
_branches = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("Branches"));
}
}
}
在一种形式(WinForms)中,我有一个绑定到该列表的 ComboBox:
// creating a binding list for the branches
var bindingList = new BindingList<Branch>(Client.Branches);
// bind list to combo box
cmbBranches.DataSource = bindingList;
cmbBranches.DisplayMember = "Name";
cmbBranches.ValueMember = "Name";
在另一个函数中,我创建了一个新Branch
对象并将其添加到现有列表中:Client.Branches.Add(newBranch)
. 我希望这会更新 ComboBox,但事实并非如此。为什么不,我该如何更新?(编辑:我也希望在从列表中删除对象时更新它。我认为它不起作用的原因是与Add
调用时框不更新的原因直接相关。)
在做研究时,我发现了这个 SO answer,这似乎暗示它会起作用。我觉得我错过了一些简单的东西......
ObservableCollection 和 BindingList 的区别
编辑:有关我尝试过的内容和一些其他目标的更多信息。
我不能使用ObservableCollection<T>
,List<T>
因为我需要Exists
在代码中使用。前者没有。
添加新对象时,除了更新下拉框外,我还需要更新原始列表。
为了总结我的评论,我尝试添加以下内容:
var bindingList = (BindingList<Branch>) cmbBranches.DataSource;
bindingList.Add(frmAddBranch.NewBranch);
但这会导致对象被两次添加到 ComboBox 中。不知何故,称之为bindingList.Add
“重置”数据源并加倍。一旦绑定,我找不到任何“刷新”数据显示的功能。 Control.ResetBindings()
不工作。