oca*_*nal 9 c# listbox refresh
int[] arr = int[100];
listBox1.DataSource = arr;
void ComboBox1SelectedIndexChanged(object sender, EventArgs e)
{
.....//some processes
listBox1.DataSource = null;
listBox1.DataSource = arr;
}
is not working,
Run Code Online (Sandbox Code Playgroud)
也,
listBox1.Refresh(); is not working,
Run Code Online (Sandbox Code Playgroud)
也,
listBox1.Update(); is not working,
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用,BindingList<T>但我必须只使用数组.
你能帮帮我怎样才能刷新列表框?
Gre*_*ase 12
我在这里的堆栈交换的第一个答案.
C#.Net 4.0:
listBox1.DataSource = null;
listBox1.DataSource = names;
Run Code Online (Sandbox Code Playgroud)
我注意到第一次设置数据源,它会刷新.当它被设置,并且您尝试再次将它设置为同一个时,它不会更新.
所以我把它设为null,把它设置为同一个,并且它正确地显示给我这个问题.
小智 5
仅当绑定在 dataSource 上的对象通知它自己的更改时,ListBox 才会更新其显示的内容。BindingSource 对象有一个名为 DataSourceChanged 的事件。当源更改为不同的对象时,列表框将自行更新。绑定列表时也是如此。如果您更改列表,则不会发生任何事情,因为列表不会通知它已更改。此问题有一个简单的解决方案:使用 BindingList http://msdn.microsoft.com/de-de/library/ms132679%28v=vs.110%29.aspx
BindingList 有 ListChanged 事件,每次列表更改时都会调用(显然)。因此 Windows.Form 对象的 DataBindings 使用 ListChanged 等事件来更新自身。简单的列表不支持此事件。
因此,如果您想使用大量数据绑定,您应该了解: http://msdn.microsoft.com/de-de/library/system.componentmodel.inotifypropertychanged%28v=vs.110%29.aspx