轻松绑定到Treeview节点的对象

Kai*_*Kai 11 c# treeview

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

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

Bil*_*llW 18

imho你有几个策略:

  1. 在任何Node的Tag属性中粘贴任何类型的对象:缺点:当你检索它以使用它时,你将不得不将它强制转换回它的"原生形式":如果那个"原生形式"不是类型'对象.

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

  3. 假设您的对象属于同一类型,您可以创建一个类型的字典:Dictionary <TreeNode,myObjectType>,实例化它,并根据需要将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 ...
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这是对象持有而不是“绑定”。 (2认同)