【问题标题】:Updating NodeView cells in GTK#在 GTK 中更新 NodeView 单元#
【发布时间】:2013-08-24 05:49:35
【问题描述】:

在通过键盘输入文本并触发Edited 事件后,如何使NodeView 单元格保留输入的值?

每当我在单元格中输入一些文本并尝试确认更改时,我编辑之前的旧值就会返回。

应该保存节点值的子类的属性永远不会用新值更新。

首先如何将文本输入到NodeView 单元格中?

【问题讨论】:

    标签: c# mono gtk# treenode


    【解决方案1】:

    诀窍是使用传递给事件处理程序的Gtk.EditedArgs 参数的Path 属性从存储中获取正确的节点并进行修改(您负责将更改从UI 传播到模型) .下面是一个完整的小例子。

    鉴于以下Gtk.TreeNode 实现:

    [Gtk.TreeNode]
    public class MyTreeNode : Gtk.TreeNode 
    {        
        public MyTreeNode(string text)
        {
            Text = text;
        }
    
        [Gtk.TreeNodeValue(Column=0)]
        public string Text;
    }
    

    如下更改Text 属性很容易:

    Gtk.NodeStore store = new Gtk.NodeStore(typeof(MyTreeNode));
    store.AddNode(new MyTreeNode("The Beatles"));
    store.AddNode(new MyTreeNode("Peter Gabriel"));
    store.AddNode(new MyTreeNode("U2"));
    
    Gtk.CellRendererText editableCell = new Gtk.CellRendererText();
    
    Gtk.NodeView view = new Gtk.NodeView(store);
    view.AppendColumn ("Artist", editableCell, "text", 0);
    view.ShowAll();
    
    editableCell.Editable = true;
    editableCell.Edited += (object o, Gtk.EditedArgs args) => {
        var node = store.GetNode(new Gtk.TreePath(args.Path)) as MyTreeNode;
        node.Text = args.NewText;
    };
    

    注意:

    1. 使用args.Path从商店获取正确的MyTreeNode;和
    2. 将结果转换为 MyTreeNode 以便能够访问 Text 属性。

    【讨论】:

    • 如何在 GTK sharp 中将数据绑定到 NodeView。
    • 有没有办法完全按照您在答案中所做的,但编辑另一列? args 提供了编辑单元格的路径,但该路径只包含行,不包含列。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多