轻松绑定Treeview节点的对象

如何将对象绑定到C#中的treeview(Winforms)节点?

我想到了类似于ExNode:Windows.Forms.Node,它可以将对象作为成员除了treenode名称之外……但是我不确定这是正确的方法。

你有几个策略:

  1. 在任何Node的Tag属性中粘贴任何类型的对象:缺点:当你检索它以使用它时,你必须将它强制转换回它的“本机forms”:如果那个“本机forms”不是类型’对象。

  2. 子类TreeNode,并为您的对象添加公共字段,公共属性或其他内容……甚至列表……或者您需要与节点关联的任何内容。

  3. 假设您的对象属于同一类型,您可以创建一个类型的字典:Dictionary ,实例化它,并根据需要将TreeNode及其关联的对象存储为键/值对。

策略#1和#3的优点是,您只能根据需要存储关联对象策略#2:更适合您预期每个TreeNode将具有关联对象的情况。

当然,对于stragy#1和#3,您需要在运行时测试是否存在与特定节点关联的对象。

策略#1是一个简单的测试:如果节点的标签属性为空:你知道没有对象:如果不是空的……并且标签字段中可能存在多种类型的对象…那么你’我必须拔出Tag对象,并确保它是正确的类型,如下所示:(以下示例假定公共类“Class1”已分配给TreeView中第一个节点的标记:

TreeNode thisNode = theTreeView.Nodes[0]; if (((thisNode.Tag != null) && (thisNode.Tag is Class1))) ... handle the object ... 

策略#3稍微容易一些,因为您可以只评估Dictionary 。将Node包含为Key。

你在TreeNodes上寻找类似Tag属性的东西吗? 它可以容纳任何物体。

http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx

这篇MSDN文章有一些很好的信息,例如:

 class myTreeNode : TreeNode { public string FilePath; public myTreeNode(string fp) { FilePath = fp; this.Text = fp.Substring(fp.LastIndexOf("\\")); } }