我不明白如何处理Gtkmm 3。
我有一个我自己声明的自定义业务类型:
[HttpPost]
public ActionResult EditFirstCharac(EditCharacViewModel vm)
{
if (ModelState.IsValid)
{
// OK, save to DB or whatever and Redirect to a GET action (PRG pattern)
}
//Reload data
vm.PossibleAnswers = charac.Question.PossibleAnswers
.ToListSelectListItem(p => p.Id.ToString(), p => p.Label).ToList();
return View("Edit", vm);
}
我想将此类型呈现为enum class Eurocents : int {};
,其中Gtk::TreeView
为模型。所以我声明了Gtk::ListStore
,并将其添加到模型中。然后我Gtk::TreeModelColumn<Eurocents>
将此模型列添加到具有相应标题的append_column
。
我然后Gtk::TreeView
到模型并将与列对应的值设置为append_row
。
我得到的结果是单元格显示为空。可以理解的是,因为我不希望Gtkmm知道如何渲染我的任意类型。
我想指导Gtkmm如何渲染我的类型。
我已经知道如何显示像(Eurocents)100
这样的Glib类型,并且可以格式化为Glib::ustring
进行显示,但这不是问题的主题。
是否可以对可以显示任意类型的列进行编码?如果是这样,怎么样?分拣工作需要什么?
答案 0 :(得分:1)
最常见,最简单的方法是使用cell_data_func回调。例如,您可以创建自己的Gtk :: TreeView :: Column实例(视图列),将一个单元格渲染器(或更多)打包到您的Gtk :: TreeView :: Column中,附加您的Gtk :: TreeView ::使用Gtk :: TreeView :: append_column()访问TreeView的列,并在Gtk :: TreeView :: Column()上调用set_cell_data_func(): https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeViewColumn.html#a3469e1adf42e5932ea123ec33e4ce4e1
然后,回调将从模型中获取值,并设置渲染器属性的相应值。
这是一个示例,显示了set_cell_data_func()的使用,以及显示其他内容: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#sec-editable-cells-example
此链接也应该有用: https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview.html.en#treeview-cellrenderer-details
如果您愿意,Gtk :: TreeView :: insert_column_with_data_func()会使这更加简洁:https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeView.html#a595dcc0b503a7c1004c296b82c51ac54
至于排序,您应该只需调用set_sort_func()来指定列的排序方式:https://developer.gnome.org/gtkmm/stable/classGtk_1_1TreeSortable.html#a3a6454bd0a285324c71edb73e403cb1c
然后应该应用这种常规排序建议:https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-sort.html.en