2012-07-31 2 views
0

내 treeview에서 노드를 삭제하거나 삽입 한 후 확장 된 노드를 기억하고 해당 상태를 다시 그려야합니다. 확장 된 노드의 인덱스를 기억하여 해결했습니다. 노드가 제거되면 이후의 모든 indeces를 감소시킵니다. 삭제 된 노드에 treeView.SelectedNode로 액세스 할 수 있기 때문에 작동하지만 삽입 된 노드의 새 인덱스를 얻으려면 어떻게해야합니까? 트리를 다시 그릴 때 노드가 완전히 새로 만들어 졌기 때문에 노드 또는 이름이나 태그에 대한 참조를 저장하는 것으로 해결할 수 없습니다. 어쨌든 새로 만든 노드에 대한 참조를 얻을 수 없다고 생각합니다. 최고 감사합니다 Expecto트리 뷰에 삽입 된 노드의 색인을 가져올 수 있습니까?

답변

0

대답은 내가 찾던 정말 아니었지만, 내가 발견 한 후 삽입 한 후 "AfterSelect"이벤트가 발생, 나는 이런 식했다는 것을 :

private void treeViewProduct_AfterSelect(object sender, TreeViewEventArgs e) 
    { 

     if (insertMode) 
     { 

      treeViewProduct.NotifyAboutInsert(e.Node.Index); 
     } 
... 
} 

내 트 리뷰는 다음 변경 처리를 그 이후의 노드에 대한 인덱스를 생성하고 트리를 완벽하게 다시 그립니다.

0

내 방법 : 당신은 그런 당신의 TreeNode에 ObservableCollection에 바인딩 할 수

class TreeNodeEx : TreeNode 
{ 
    public void Remove() 
    { 
     base.Remove(); 
     // what you want to do 
     UpdateNode(this.Parent); 
    } 
} 
0

:

 var obd = Observable.FromEvent<NotifyCollectionChangedEventArgs>(
      ev => obdCollection.CollectionChanged += CheckChanges,ev=> obdCollection.CollectionChanged -= CheckChanges); 


    private void CheckChanges(object sender, NotifyCollectionChangedEventArgs e) 
    { 
     Console.WriteLine("new Starting index : "+e.NewStartingIndex); 
     Console.WriteLine("Old Starting index : " + e.OldStartingIndex); 
     Console.WriteLine("new Items : " + e.NewItems); 
     Console.WriteLine("Old Items : " + e.OldItems); 


    } 

당신이 변경 내용을 확인할 수 있습니다 그 방법을 자신의 선언 클래스를 사용 수집.