2012-02-21 16 views
1

私はGTKシャープなアプリケーションで作業しています。このコードはありますが、combobox1は項目を表示していません。何故なの?なぜ私のコンボボックスにテキストが表示されないのですか?

ListStore store = new ListStore(typeof(myclass)); 

store.AppendValue(new myclass("hola",7)); 
store.AppendValue(new myclass("hola2",8)); 
store.AppendValue(new myclass("hola3",2)); 

combobox1.Model = store; 

クラスmyclassオーバーライドToString()

+0

なぜ、コンボボックス 'combobox1.DisplayMember =" description "に対して以下のプロパティを設定していないのですか? combobox1.ValueMember = "id"; '? –

答えて

0

私は本当にわからないんだけど、リストボックスのキーと値はクラス内のフィールドにマッピングされていることを確認してください。私はそれが具体的である必要があると思う。値を設定したら、最終的なデータバインドを次のようにしてください:control.DataBind();

一般に、C#バインディングは次のようになります。1)自動列生成/すべてのフィールドをキーと値に手動でマップする2)。フィールド3を設定し、bind()関数を呼び出します。何を探してるんですが、カスタムGtk.CellRendererある

2

private void MyClassRenderer(CellLayout cell_layout, CellRenderer cell, TreeModel model, TreeIter iter) 
{  
    MyClass myclass = model.GetValue(iter, 0) as MyClass; 
    (cell as CellRendererText).Text = myclass.ToString(); 
} 

このような設定方法でいくつかの追加のコードで:

CellRendererText myClassCell = new CellRendererText(); 
combobox1.PackStart(myClassCell, true); 
combobox1.SetCellDataFunc(myClassCell, MyClassRenderer); 

ListStore store = new ListStore(typeof(MyClass)); 

store.AppendValues(new MyClass("hola",7)); 
store.AppendValues(new MyClass("hola2",8)); 
store.AppendValues(new MyClass("hola3",2)); 

combobox1.Model = store; 

SetCellDataFunc方法がPackStartメソッドの後に呼び出されていることを確認します。

ジョブ完了! :)

+0

これはかなり良い答えです。 – Luka

関連する問題