2009-12-10 102 views
11

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

我想到了像ExNode这样的东西:Windows.Forms.Node可以把一个对象当作treenode名称之外的成员......但我不确定这是否正确。

回答

17

恕我直言,你有几种策略:

  1. 坚持任何类型的任何节点的Tag属性的对象:缺点:你必须将它转换回它的“原生表单',当你检索它来使用它:如果这个“本地表单”只是类型'对象'。

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

  3. 假设你的对象都是同一类型的,你可以创建一个类型的字典:字典<树节点,myObjectType >,实例化,并根据需要,存储树节点及其关联的对象(s)表示方式一个键/值对。

策略#1和#3具有可以关联对象存储仅在需要策略#2的优点是:更适合于在那里你预见所有树节点都将有一个相关联的对象的情况下( S)。

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

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

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

战略#3是更容易一些,因为你可以评估该词典<节点,myObject的>。载节点作为重点。

+0

战略#1似乎是最适合我。我会尝试,thx – Kai 2009-12-10 23:16:35

+1

我认为这是对象而不是“绑定”。 – 2012-08-28 03:18:55

1

This MSDN article有一些很好的信息,例如:

class myTreeNode : TreeNode 
{ 
    public string FilePath; 

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