我正在编写Windows应用程序并使用Listbox控件.我正在使用Visual Studio C#2008 Express Edition进行开发.
我有一个看起来像这样的数据对象
public class RootObject { public ListMySubObjects{ get; set;} }
我的表单上有一个ListBox,还有一个属性"MyRootObject",显然它拥有一个RootObject.初始化控件时,我设置:
_listBox.DataSource = MyRootObject.MySubObjects;
现在,当表单加载时,我调试并看到正确设置了DataSource.但没有显示任何内容.我已经覆盖了SubObject的ToString()方法,甚至没有被调用.我尝试将_listBox.DisplayMember设置为SubObject的属性,只是为了查看是否存在某些问题,但仍然没有.我在设置DataSource后尝试调用_listBox.Update()和_listBox.Refresh(),但仍然没有爱.DataSource拥有所有数据......它只是拒绝显示它.
所以在调试时,我想知道WTF,我决定这样做
_listBox.DataSource = new List{ new SubObject(), new SubObject() };
果然,这很有效,我看到列表框中列出了两件事.
那么,真的很好奇,我决定尝试复制对象列表并将其放入列表框中,如下所示:
_listBox.DataSource = MyRootObject.MySubObjects.ToArray();
这有效!现在这是解决我的问题的方法......但是非常讨厌.有谁知道为什么我需要基本上复制像这样的对象列表才能使它工作,而不是只设置_listBox.DataSource = MyRootObject.MySubObjects; ?同样,DataSource在设置之后以任何一种方式拥有所有正确的数据...它只是在复制数据时,它实际显示,而当它不复制时,它不会显示.
((CurrencyManager)_listBox.BindingContext[_listBox.DataSource]).Refresh();
Sux0r我知道,但这很有效.(最初在这里找到答案)