2015-12-22 3 views
0

Кто-нибудь знает, какое событие можно узнать, когда привязка данных завершена в элементе управления ListBox после установки его DataSource?Winforms Элемент управления ListBox Элемент empty в обработчике событий DataSourceChanged

Включение в DataSourceChanged не делает трюк, поскольку коллекция элементов по-прежнему пуста в элементе управления, когда это событие запущено.

+0

Ответ на мой подобный вопрос может сделать трюк для вас; см. http://stackoverflow.com/questions/34421735/how-can-i-immediately-reactively-determine-if-any-checkedboxlistitem-has-been-se –

ответ

1

Самый простой способ это просто использовать коллекцию DataSource вместо:

void listBox1_DataSourceChanged(object sender, EventArgs e) { 
    var count = ((ICollection)listBox1.DataSource).Count; 
} 

закиньте DataSource соответствующим образом.

В противном случае, вы можете использовать BeginInvoke, чтобы получить обновление после того, как событие DataSourceChanged изжил:

void listBox1_DataSourceChanged(object sender, EventArgs e) { 
    this.BeginInvoke(new Action(() => { 
    var count = listBox1.Items.Count; 
    })); 
} 
0

Кто-нибудь знает, какое событие вклиниться, чтобы знать, когда связывание данных является полным на ListBox после установки его DataSource?

Нет такого события. Но вы можете создать свой собственный подкласс ListBox и разоблачить такое событие, как этот

public class MyListBox : ListBox 
{ 
    public event EventHandler DataSourceApplied; 

    protected override void OnDataSourceChanged(EventArgs e) 
    { 
     base.OnDataSourceChanged(e); 
     var handler = DataSourceApplied; 
     if (handler != null) handler(this, EventArgs.Empty); 
    } 
} 
0

Спасибо, ребята. Я фактически декомпилировал код ListBox с помощью Resharper и обнаружил, что событие DisplayMemberChanged сделало трюк для меня, поэтому я использовал это. Спасибо за предложения, хотя!

Смежные вопросы