Почему мой комбинированный список не отображает текст? - PullRequest
1 голос
/ 21 февраля 2012

Я работаю в 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()

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

То, что вы ищете, является пользовательским Gtk.CellRenderer:

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 голосов
/ 21 февраля 2012

Я не совсем уверен, но убедитесь, что ключ списка и значения сопоставлены с полями в классе.Я думаю, что это должно быть конкретным.После установки значения убедитесь, что окончательная привязка данных выполняется следующим образом: control.DataBind ();

В общем случае привязка C # выполняется следующим образом: 1) автоматическое создание столбцов / сопоставление всех полей вручную с ключами и значениями 2),установите поле 3. и вызовите функцию bind ().

...