【问题标题】:Winforms ListBox control Items property empty in DataSourceChanged event handlerDataSourceChanged 事件处理程序中的 Winforms ListBox 控件 Items 属性为空
【发布时间】:2015-12-22 18:08:56
【问题描述】:

有谁知道在设置 DataSource 后 ListBox 控件上的数据绑定完成时要挂钩什么事件?

挂钩 DataSourceChanged 并不能解决问题,因为在触发此事件时,控件上的 Items 集合仍然为空。

【问题讨论】:

标签: winforms


【解决方案1】:

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

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

适当地转换 DataSource。

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

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

【讨论】:

    【解决方案2】:

    有谁知道在设置 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      谢谢各位。我实际上使用 Resharper 反编译了 ListBox 代码,发现 DisplayMemberChanged 事件对我有用,所以我使用了它。不过感谢您的建议!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多