Winforms ListBox控件DataSourceChanged事件处理程序中的Items属性为空

时间:2015-12-22 18:08:57

标签: winforms

在设置DataSource后,是否有人知道要在ListBox控件上何时完成数据绑定时要挂钩的事件?

挂起到DataSourceChanged并不起作用,因为当触发此事件时,Items集合在控件上仍为空。

3 个答案:

答案 0 :(得分:1)

简单的方法是使用DataSource集合:

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

适当地投射数据源。

否则,您可以使用BeginInvoke在DataSourceChanged事件运行之后获取更新:

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

答案 1 :(得分:0)

  

在设置DataSource后,是否有人知道要在ListBox控件上何时完成数据绑定时要挂钩的事件?

没有这样的事件。但是你可以创建自己的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);
    }
}

答案 2 :(得分:0)

谢谢你们。我实际上使用Resharper反编译ListBox代码并发现DisplayMemberChanged事件为我做了伎俩所以我使用了它。谢谢你的建议!