У меня есть объект, представляющий клиента, и этот объект имеет список ветвей клиентов:
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, который, похоже, подразумевает, что он будет работать. Я чувствую, что упускаю что-то простое...
разница между ObservableCollection и BindingList
Изменить: дополнительная информация о том, что я пробовал, и некоторые дополнительные цели.
Я не могу использовать ObservableCollection<T>
вместо List<T>
, так как мне нужно использовать Exists
в коде. Чего нет у первого.
Мне нужно обновить исходный список при добавлении нового объекта в дополнение к обновлению раскрывающегося списка.
Подводя итог моим комментариям ниже, я попытался добавить это:
var bindingList = (BindingList<Branch>) cmbBranches.DataSource;
bindingList.Add(frmAddBranch.NewBranch);
Но это приводит к тому, что объект дважды добавляется в ComboBox. Каким-то образом, вызывая bindingList.Add
, он «сбрасывает» источник данных и удваивается. Я не могу найти какую-либо функцию, которая «обновляет» отображение данных после его привязки. Control.ResetBindings()
не получилось.
bindingList
? В этом есть смысл ... - person Nathan Loding   schedule 18.06.2013var bindingList = (BindingList<Branch>) cmbBranches.DataSource; bindingList.Add(frmAddBranch.NewBranch);
- person Nathan Loding   schedule 18.06.2013