我正在编写一个 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 的属性,以查看那里是否存在问题,但仍然没有。在设置数据源后,我尝试调用 _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 在设置后无论哪种方式都具有所有正确的数据......它只是在复制数据时,它实际显示,而当它不是时,它不会显示。