C# 获取有序Gtk树视图(Gtk#)的第一行

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

我有一个Gtk#TreeView,其中有一个可见列,其模型包含3个值(可见列的文本、对树进行排序的值以及对基础对象的引用)。代码如下:

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);