【发布时间】:2015-12-22 18:08:56
【问题描述】:
有谁知道在设置 DataSource 后 ListBox 控件上的数据绑定完成时要挂钩什么事件?
挂钩 DataSourceChanged 并不能解决问题,因为在触发此事件时,控件上的 Items 集合仍然为空。
【问题讨论】:
-
我的类似问题的答案可能对你有用;见stackoverflow.com/questions/34421735/…
标签: winforms
有谁知道在设置 DataSource 后 ListBox 控件上的数据绑定完成时要挂钩什么事件?
挂钩 DataSourceChanged 并不能解决问题,因为在触发此事件时,控件上的 Items 集合仍然为空。
【问题讨论】:
标签: winforms
简单的方法是只使用 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;
}));
}
【讨论】:
有谁知道在设置 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);
}
}
【讨论】:
谢谢各位。我实际上使用 Resharper 反编译了 ListBox 代码,发现 DisplayMemberChanged 事件对我有用,所以我使用了它。不过感谢您的建议!
【讨论】: