C# 在Gtk中,为什么即使在我用IterIsValid检查有效ITER后,有效ITER也会失败?

C# 在Gtk中,为什么即使在我用IterIsValid检查有效ITER后,有效ITER也会失败?,c#,gtk,gtk#,gtktreeview,C#,Gtk,Gtk#,Gtktreeview,我的TreeView中有一个方便的函数,如下所示: Card GetCardFromPath (TreePath path) { TreeIter iter; if (path == null || !Model.GetIter (out iter, path)) return null; if ((Model as TreeModelSort).IterIsValid (iter)) return (Card) Model.GetVal

我的
TreeView
中有一个方便的函数,如下所示:

Card GetCardFromPath (TreePath path)
{
    TreeIter iter;
    if (path == null || !Model.GetIter (out iter, path))
        return null;

    if ((Model as TreeModelSort).IterIsValid (iter))
        return (Card) Model.GetValue (iter, 0);

    return null;
}
大多数情况下,这项工作没有任何错误。但是,当模型更改后直接调用它时,第8行给出了以下Gtk运行时错误:

[Fatal 16:53:02.448] [Gtk] gtk_list_store_get_value: assertion `VALID_ITER (iter, list_store)' failed
[Fatal 16:53:02.449] [GLib-GObject] g_value_unset: assertion `G_IS_VALUE (value)' failed
据我所知,我甚至不需要检查
IterIsValid
,因为我已经在检查
Model.GetIter
的返回值。即便如此,
VALID\u ITER
如何在一个函数中失败,而该函数只有在
IterIsValid
返回
true
时才会被调用


如果有区别,则模型是一个
TreeModelSort
,它对
TreeModelFilter
进行排序,过滤
ListStore
。当刚刚从列表存储中删除多行时,从
HandleSelectionChanged
调用
GetCardFromPath
时会发生错误。它似乎不会阻止任何东西正常工作,但每当我删除多行时出现一系列错误并不是很理想。

您能澄清一下“模型更改后”吗?是否替换ListStore或修改其内容?如果要替换,还需要重新连接TreeModelSort。