在我的树视图中,我想记住在删除或插入节点后,哪些节点已展开并重绘该状态。我通过记住扩展节点的索引解决了这个问题。如果删除了一个节点,我会减少之后的所有权限。 这是有效的,因为我可以使用treeView.SelectedNode访问已删除的节点,但是如何获取插入节点的新索引? 我无法通过保存对节点或名称或标签的引用来解决它,因为当我重绘树时,节点是全新创建的 - 我想我无法获得对新创建的节点的引用 最好的问候,Expecto
答案 0 :(得分:0)
我的方式:使用你自己声明的类:
class TreeNodeEx : TreeNode
{
public void Remove()
{
base.Remove();
// what you want to do
UpdateNode(this.Parent);
}
}
答案 1 :(得分:0)
您可以将observableCollection绑定到TreeNode然后:
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);
}
通过这种方式,您可以查看集合中的更改内容。
答案 2 :(得分:0)
答案并不是我真正想要的,但是在我发现插入后“AfterSelect”事件发生后,我这样做了:
private void treeViewProduct_AfterSelect(object sender, TreeViewEventArgs e)
{
if (insertMode)
{
treeViewProduct.NotifyAboutInsert(e.Node.Index);
}
...
}
然后我的树视图处理节点之后更改的索引,并完美地重绘树。