C# 获取有序Gtk树视图(Gtk#)的第一行
我有一个Gtk#TreeView,其中有一个可见列,其模型包含3个值(可见列的文本、对树进行排序的值以及对基础对象的引用)。代码如下:C# 获取有序Gtk树视图(Gtk#)的第一行,c#,gtk,gtk#,C#,Gtk,Gtk#,我有一个Gtk#TreeView,其中有一个可见列,其模型包含3个值(可见列的文本、对树进行排序的值以及对基础对象的引用)。代码如下: internal class JpgTreeView : TreeView { private readonly ListStore _store = new ListStore(typeof(string), typeof(int), typeof(ITreeViewChoice)); private TreeModelSort _sorted
internal class JpgTreeView : TreeView
{
private readonly ListStore _store = new ListStore(typeof(string), typeof(int), typeof(ITreeViewChoice));
private TreeModelSort _sortedModel;
private enum Column
{
Text,
SortValue,
Value
}
public JpgTreeView()
{
var valueColumn = new TreeViewColumn();
AppendColumn(valueColumn);
var visisbleColumnTextRenderer = new CellRendererText();
valueColumn.PackStart(visisbleColumnTextRenderer, true);
valueColumn.AddAttribute(visisbleColumnTextRenderer, "text", (int) Column.Text);
_sortedModel = new TreeModelSort(_store);
_sortedModel.SetSortColumnId((int) Column.SortValue, SortType.Descending);
_sortedModel.SetSortFunc((int) Column.SortValue, (model, a, b) =>
{
var aval = (int) model.GetValue(a, (int) Column.SortValue);
var bval = (int) model.GetValue(b, (int) Column.SortValue);
return aval.CompareTo(bval);
});
Model = _sortedModel;
}
排序工作正常,但\u store.GetIterFirst
函数始终检索原始第一行(即未排序列表的第一行)<代码>\u sortedModel.GetIterFirst返回以下错误消息:
gtk_列表_存储_获取_值:断言“iter_有效(iter,列表_存储)”失败
我正在使用以下函数填充TreeView:
public void SetChoices(IEnumerable<ITreeViewChoice> choices)
{
_store.Clear();
foreach (var choice in choices)
{
_store.AppendValues(choice.GetChoiceText(), 1, choice);
}
}
public void SetChoices(IEnumerable选项)
{
_store.Clear();
foreach(选择中的var选择)
{
_store.AppendValues(choice.GetChoiceText(),1,choice);
}
}
如何获取已排序列表的第一行?
\u sortedModel.GetIterFirst
是检索已排序Gtk树视图(TreeModelSort)第一行的正确方法
我遇到的问题是,我在ListStore中使用了从TreeModelSort返回的行,该行无效。i、 e.这是正确的:
_sortedModel.GetIterFirst(out var iter);
var value = _sortedModel.GetValue(iter, (int) Column.Value);
这是不正确的(我当时所做的):
你能提供完整的例子吗
GetIterFirst()
方法返回布尔值,检查该值。您是否在liststore被弹出值之前初始化了iter?您的JpgTreeView类令人困惑。它继承自TreeView,因此它必须是TreeView。但是你有一个列表商店在里面。从您的示例来看,treeview似乎与liststore没有关联。我将其更新为使用TreeStore。这里有一个项目链接:我现在看到了我的错误。我被树顶和树模型分类弄糊涂了。从TreeModelSort获取行是正确的,但是我试图使用TreeStore提取TreeModelSort行的值,这是无效的。我会补充一个答案
_sortedModel.GetIterFirst(out var iter);
var value = _store.GetValue(iter, (int) Column.Value);