А>class Demo
А>{
А> private readonly List<string> list = new List<string>();
А> private readonlt ListBox listBox = ...;
А> public Demo()
А> {
А> // ... тут формируем список
А> listBox.DataSource = list;
А> }
А> // ... гдето в коде
А> list.Add("aaaa");
А> list[5] = "bbbbb";
А> // а что сделать здесь чтобы listBox отобразил изменения в моем списке?
А>}
Здравствуйте, Аноним, Вы писали:
А>Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?
Не пробовал использовать BindingSource (как промежуточное звено)?
Делаешь так:
BindingSource bs = new BindingSource();
bs = items // твой список
combobox1.DataSource = bs;
Уведомить объект с DataSource об изменениях
От:
Аноним
Дата:
22.07.09 17:57
Оценка:
Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?
Здравствуйте, Аноним, Вы писали:
А>Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?
Речь идет о WindowsForms?
Если да, то насколько я понимаю нужно получить объект типа CurrencyManager с помощью свойства BindingContext контрола. Т.е. где-то при установке датасурса в вашем контроле может быть такой код:
currencyManager = (CurrencyManager)this.BindingContext[dataSource];
// и далее мы подписываемся на события, предоставляемые CurrencyManager'ом, к примеру:
currencyManager.ListChanged += CurrencyManager_ListChanged;
В обработчике CurrencyManager_ListChanged мы уже определяем какого рода изменение произошло в источнике данных и в зависимости от этого принимаем те или иные действия. К примеру вот так можно вывести добавленный элемент:
Если вы наследуетесь уже от какого-то высокоуровневого контрола типа ListControl/ListBox, то этот контрол будет сам подписываться на соответствующие события, и обычно с помощью паттерна NVI вызывать метод который должен отображать соответствующие изменения в контроле.
Re[2]: Уведомить объект с DataSource об изменениях
От:
Аноним
Дата:
23.07.09 08:04
Оценка:
Здравствуйте, MozgC, Вы писали:
MC>Здравствуйте, Аноним, Вы писали:
А>>Есть WinForms контрол...
MC>Речь идет о WindowsForms?
да
MC>Если да, то насколько я понимаю нужно получить объект типа CurrencyManager с помощью свойства BindingContext контрола. Т.е. где-то при установке датасурса в вашем контроле может быть такой код
наверное я плохо объяснил, попробую еще раз.
есть List<string> заполненый некими значениями. есть контрол с DataSource.
class Demo
{
private readonly List<string> list = new List<string>();
private readonlt ListBox listBox = ...;
public Demo()
{
// ... тут формируем список
listBox.DataSource = list;
}
// ... гдето в коде
list.Add("aaaa");
list[5] = "bbbbb";
// а что сделать здесь чтобы listBox отобразил изменения в моем списке?
}
Re[3]: Уведомить объект с DataSource об изменениях
От:
Аноним
Дата:
23.07.09 18:15
Оценка:
Здравствуйте, Аноним, Вы писали:
Люди, неужели я хочу необычного/невозможного? Подскажите куда копать?
з.ы. имхо должна быть эта элементарнейшая возможность
Re[4]: Уведомить объект с DataSource об изменениях
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали: А>Люди, неужели я хочу необычного/невозможного? Подскажите куда копать? А>з.ы. имхо должна быть эта элементарнейшая возможность
Надо реализовать интерфейс IBindingListView для списка или использовать этот
Здравствуйте, Аноним, Вы писали:
А>ниче не понял. зачем создается BindingSource если он потом затирается items и более не используется? А>получается combobox1.DataSource = items
Там человек опечатался, правильно: bs.DataSource = items;