GTK #

2013-08-24 2 views
0

의 NodeView 셀 업데이트 키보드를 통해 텍스트를 입력하고 Edited 이벤트가 발생한 후 NodeView 셀에 입력 된 값을 유지시키는 방법은 무엇입니까?GTK #

셀에 텍스트를 입력하고 변경 사항을 확인하려고 할 때마다 편집하기 전에 있던 이전 값이 다시 나타납니다.

노드 값을 보유해야하는 하위 클래스의 속성은 새 값으로 업데이트되지 않습니다.

먼저 NodeView 셀에 입력 된 텍스트를 어떻게 가져 옵니까?

답변

2

트릭은 이벤트 핸들러에 전달 된 Gtk.EditedArgs 인수의 Path 속성을 사용하여 저장소에서 올바른 노드를 가져 와서 수정 (UI에서 모델로 변경 내용을 전파해야 함)하는 것입니다. 작고 완전한 예가 다음과 같습니다.

다음 Gtk.TreeNode 구현을 감안할 때 :

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의 사용이를 얻을 수

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

    는 다음과 같이 Text 속성을 변경하기 쉽습니다 상점에서 MyTreeNode을 수정하십시오.

  2. Text 속성에 액세스 할 수 있도록 결과를 MyTreeNode으로 형 변환합니다.
+0

GTK 샤프의 노드 뷰에 데이터를 바인딩하는 방법. – Anjali

+0

답변에서 정확히 수행 할 수있는 방법이 있습니까?하지만 다른 열을 편집 하시겠습니까? 'args'는 편집 된 셀의 경로를 제공하지만 그 경로는 열이 아니라 행만 포함합니다. – zdimension