Здравствуйте, cvetkov, Вы писали:
C>кажеться коллекция должна реализовывать IBindingList или чтото в этом роде. точно не помню
Всё верно. Если ваша коллекция предназначена только для биндинга, то можно не создавать свой класс коллекции, а воспользоваться BindingList<T>. Вот пример для ComboBox'а :
private class AddressToken : INotifyPropertyChanged, IDisposable
{
...
}
...
private BindingList<AddressToken> _addressTokens;
...
cmbAddress.BeginUpdate();
cmbAddress.Items.Clear();
_addressTokens = new BindingList<AddressToken>();
_addressTokens.AllowEdit = false;
_addressTokens.AllowNew = false;
_addressTokens.AllowRemove = false;
foreach (DataRowView rowView in AddressBindingSource)
{
_addressTokens.Add(new AddressToken(rowView.Row));
}
cmbAddress.DataSource = new BindingSource(_addressTokens, string.Empty);
cmbAddress.DisplayMember = "Address";
cmbAddress.ValueMember = "Id";
UpdateSelectedAddress();
cmbAddress.EndUpdate();
Все действия с коллекцией _addressTokens сразу же будут отражаться в ComboBox'е. Если элемент коллекции правильно реализует INotifyPropertyChanged, то будут автоматически отображаться изменения в значении отображаемого свойства (в данном примере — Address).