我试图让下面的代码块工作,代码块假设从具有TreeModelFilter的TreeView中删除一行,代码编译并运行正常,但TreeView不反映行正在除去。
// Remove an item
TreeIter iter;
TreeView.Selection.GetSelected (out iter);
TreeIter child_iter = Filter.ConvertChildIterToIter (iter);
ListStore.Remove(ref child_iter);
编辑:
查看此代码块上出现的错误消息:
Gtk-CRITICAL **: gtk_list_store_get_path: assertion 'iter->stamp == GTK_LIST_STORE (tree_model)->stamp' failed
Gtk-CRITICAL **: gtk_tree_model_filter_convert_child_iter_to_iter: assertion 'child_path != NULL' failed
Gtk-CRITICAL **: gtk_list_store_remove: assertion 'VALID_ITER (iter, list_store)' failed
似乎显然这意味着iter无效,通常来自不同的模型,但是因为我只有一个树视图模型,我认为,即使我使用过滤器,我想这会产生两个。
答案 0 :(得分:0)
始终对未排序的模型执行迭代(基于TreeModel)。
可以链接过滤/排序模型,并可能减少可见数据集。它们仅用于此目的。此外,可以在不同的树视图中显示相同的模型,具有不同的过滤/排序。