C# Winforms-将树节点耦合到数据结构的设计模式

C# Winforms-将树节点耦合到数据结构的设计模式,c#,winforms,design-patterns,data-structures,treeview,C#,Winforms,Design Patterns,Data Structures,Treeview,我目前有一个数据结构,它显示文件系统树的基本结构,它基本上是一个对象,具有类似类型对象的数组列表。我想在树状视图中显示它,并且需要在树状视图节点展开、折叠、选中等时运行一些代码 我的问题-在数据结构和treeview之间是否存在一种设计模式或耦合方法,它不会要求我在每次用户选择某个节点时搜索整个DS树以查找所选节点 当前,我正在数据结构中搜索一个节点,该节点在每次触发相关树状视图事件时都具有与所选节点相同的文本和标记属性。我遇到过这样的场景:如果节点不是叶子,我就必须去重新搜索它的父节点,而且我

我目前有一个数据结构,它显示文件系统树的基本结构,它基本上是一个对象,具有类似类型对象的数组列表。我想在树状视图中显示它,并且需要在树状视图节点展开、折叠、选中等时运行一些代码

我的问题-在数据结构和treeview之间是否存在一种设计模式或耦合方法,它不会要求我在每次用户选择某个节点时搜索整个DS树以查找所选节点

当前,我正在数据结构中搜索一个节点,该节点在每次触发相关树状视图事件时都具有与所选节点相同的文本和标记属性。我遇到过这样的场景:如果节点不是叶子,我就必须去重新搜索它的父节点,而且我担心大型树的性能

请记住,数据结构已经继承了一个对象,因此我不能简单地扩展treenode类


非常感谢您提供的任何帮助

您仍然可以扩展TreeNode,但可以使用composition添加映射到节点所表示对象的额外属性

您还可以将子节点的逻辑移动到此树节点,而不是将其置于外部

public class DomainClass { /*...*/ }

public class DomainTreeNode: TreeNode
{
    public DomainClass Element { get; private set; }

    public DomainTreeNode(DomainClass element): base(element.Name)
    {
        Element = element;

        /* iterate on element's children and add them to the node's 
           Childs collection ...*/ 
    }

}

我想补充一点,我曾想过将相应的数据节点加载到treenode标记属性中,但由于datanode承载其余的子节点,我觉得它可能不必要地复制数据。但是,再仔细考虑一下,它应该只指向结构,因此没有数据复制。我认为这可能是一个有效的解决办法。如果有人能证实这一点,我将结束这个问题。请在问题中包括所有相关信息,而不是评论部分。