Re[3]: Уведомить объект с DataSource об изменениях
От: bnk СССР http://unmanagedvisio.com/
Дата: 24.07.09 15:23
Оценка: +2
А>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 отобразил изменения в моем списке?
А>}

Могу предложить:

Вариант 1
  listBox.DataSource = null;
  listBox.DataSource = list;

Вариант 2
((CurrencyManager)listBox.BindingContext[listBox.DataSource]).Refresh();
Re: Уведомить объект с DataSource об изменениях
От: alexeinel  
Дата: 27.07.09 07:21
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?


Не пробовал использовать BindingSource (как промежуточное звено)?

Делаешь так:
BindingSource bs = new BindingSource();
bs = items // твой список
combobox1.DataSource = bs;
Уведомить объект с DataSource об изменениях
От: Аноним  
Дата: 22.07.09 17:57
Оценка:
Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?
Re: Уведомить объект с DataSource об изменениях
От: MozgC США http://nightcoder.livejournal.com
Дата: 22.07.09 19:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть WinForms контрол. DataSource установлен в некий список объектов. Значения объектов изменились, в список были добавлены/удалены значения. Как правильно уведомить контрол об изменениях и "применить" их?


Речь идет о WindowsForms?
Если да, то насколько я понимаю нужно получить объект типа CurrencyManager с помощью свойства BindingContext контрола. Т.е. где-то при установке датасурса в вашем контроле может быть такой код:

currencyManager = (CurrencyManager)this.BindingContext[dataSource];
// и далее мы подписываемся на события, предоставляемые CurrencyManager'ом, к примеру:
currencyManager.ListChanged += CurrencyManager_ListChanged;

В обработчике CurrencyManager_ListChanged мы уже определяем какого рода изменение произошло в источнике данных и в зависимости от этого принимаем те или иные действия. К примеру вот так можно вывести добавленный элемент:

private void CurrencyManager_ListChanged(...)
{
  if(e.ListChangeType == ListChangeType.ItemAdded)
  {
    MessageBox.Show(currenctyManager.List[e.NewIndex].ToString());
  }
}

Если вы наследуетесь уже от какого-то высокоуровневого контрола типа 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 об изменениях
От: OrSol  
Дата: 24.07.09 14:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:

А>Люди, неужели я хочу необычного/невозможного? Подскажите куда копать?
А>з.ы. имхо должна быть эта элементарнейшая возможность

Надо реализовать интерфейс IBindingListView для списка или использовать этот
Автор: OrSol
Дата: 11.06.08
Re[2]: Уведомить объект с DataSource об изменениях
От: Аноним  
Дата: 27.07.09 15:45
Оценка:
Здравствуйте, alexeinel, Вы писали:

A>Делаешь так:

A>BindingSource bs = new BindingSource();
A>bs = items // твой список
A>combobox1.DataSource = bs;

ниче не понял. зачем создается BindingSource если он потом затирается items и более не используется?
получается combobox1.DataSource = items
Re[3]: Уведомить объект с DataSource об изменениях
От: MozgC США http://nightcoder.livejournal.com
Дата: 27.07.09 15:46
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ниче не понял. зачем создается BindingSource если он потом затирается items и более не используется?

А>получается combobox1.DataSource = items

Там человек опечатался, правильно: bs.DataSource = items;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.