私は Windows アプリケーションを作成しており、Listbox コントロールを使用しています。Visual Studio C# 2008 Express Edition で開発しています。
このようなデータオブジェクトがあります
public class RootObject
{
public List<SubObject> MySubObjects{ get; set;}
}
フォームに ListBox があり、明らかに RootObject を保持する "MyRootObject" プロパティもあります。コントロールが初期化されると、次のように設定します。
_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() };
案の定、これは機能し、リストボックスに 2 つのものがリストされています。
そこで、非常に興味深いことに、次のように、オブジェクトのリストをコピーしてリストボックスに入れてみることにしました。
_listBox.DataSource = MyRootObject.MySubObjects.ToArray();
これはうまくいきます!そして、それは今のところ私の問題の回避策です...しかし、非常に厄介なものです。_listBox.DataSource = MyRootObject.MySubObjects; を設定するだけでなく、基本的にこのようなオブジェクトのリストをコピーして機能させる必要がある理由を誰かが知っていますか? ? 繰り返しますが、DataSource は、設定後にすべての適切なデータを保持しています... データがコピーされたときは実際に表示され、コピーされていないときは表示されません。