我正在编写一个Windows应用程序,使用Listbox控件。我正在使用Visual Studio C# 2008 Express Edition进行开发。
我有一个数据对象,它看起来像这样
public class RootObject
{
public List<SubObject> MySubObjects{ 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<SubObject>{ new SubObject(), new SubObject() };
果然,这起作用了,我在列表框中看到了两件事情。
然后,我非常好奇,决定尝试复制对象列表并将其放入列表框中,像这样:
_listBox.DataSource = MyRootObject.MySubObjects.ToArray();
这个方法有效!但目前它只是我的问题的一种解决方法...非常让人烦恼。有没有人知道为什么我需要基本上像这样复制对象列表才能使它工作,而不是只设置 _listBox.DataSource = MyRootObject.MySubObjects;?同样,在设置后,DataSource 两种方式都具有正确的数据...只有在复制数据时,它才会显示出来,而当没有复制时,则不会显示。