Я пишу приложение для Windows и использую элемент управления Listbox. Я занимаюсь разработкой Visual Studio C # 2008 Express Edition.
У меня есть объект данных, который выглядит примерно так
public class RootObject
{
public List<SubObject> MySubObjects{ get; set;}
}
В моей форме есть ListBox, а также свойство "MyRootObject", которое, очевидно, содержит RootObject. Когда элемент управления инициализирован, я установил:
_listBox.DataSource = MyRootObject.MySubObjects;
Теперь, когда форма загружается, я отлаживаю и вижу, что источник данных установлен правильно. Но ничего не отображается. Я переопределил метод ToString () SubObject, и он даже не вызывается. Я попытался установить _listBox.DisplayMember для свойства SubObject, просто чтобы посмотреть, есть ли там какая-то проблема, но все еще ничего. Я пытался вызвать _listBox.Update () и _listBox.Refresh () после установки DataSource, но все равно не любил. DataSource содержит все данные ... он просто отказывается отображать их.
Итак, во время отладки я удивился WTF и решил просто сделать
_listBox.DataSource = new List<SubObject>{ new SubObject(), new SubObject() };
Конечно, это сработало, и я вижу две вещи, перечисленные в моем списке.
Итак, очень любопытно, я решил попробовать скопировать список объектов и поместить его в список, например, так:
_listBox.DataSource = MyRootObject.MySubObjects.ToArray();
Это работает! И это временное решение моей проблемы ... но очень раздражающее. Кто-нибудь знает, почему мне нужно в основном копировать список объектов, подобных этому, чтобы заставить его работать, а не просто устанавливать _listBox.DataSource = MyRootObject.MySubObjects; ? Опять же, DataSource имеет все нужные данные в любом случае после их установки ... просто когда они копируют данные, они действительно отображаются, а когда нет, они не отображаются.