Адаптер для объекта, который реализует интерфейс ITreeNode для TreeNode для TreeView - PullRequest
0 голосов
/ 11 апреля 2011

Предположим, у нас есть интерфейс:

public interface ITreeNode
    {
        string Text { get; set; }
        IEnumerable<ITreeNode> Nodes { get; set; }
    }

Предположим, что у нас есть первый узел дерева, где каждый объект внедряет этот интерфейс.

Какой простой способ отобразить это дерево(дерево ITreeNode) в TreeView?

Другими словами, как мне адаптировать все дерево ITreeNode к System.Windows.Forms.TreeNode для System.Windows.Forms.TreeView?

Обратите внимание: приведенный выше интерфейс предназначен только для того, чтобы получить представление, если есть альтернативный способ добавления узлов деревьев какого-либо типа в TreeNodes для TreeView, пожалуйста, сообщите.

1 Ответ

1 голос
/ 11 апреля 2011

Windows Forms TreeView будет работать только с типом TreeNode, поэтому вам потребуется какое-то преобразование, если вы хотите использовать экземпляры ITreeNode с элементом управления.Я предлагаю метод расширения, такой как приведенный ниже:

public static class TreeViewExtensions {

    public static void Add(this TreeNodeCollection nodes, ITreeNode node) {
        TreeNode treeNode = new TreeNode(node.Text);
        foreach (ITreeNode child in node.Nodes) treeNode.Nodes.Add(child);
        nodes.Add(treeNode);
    }
}

Затем вы можете просто добавить свой узел (и всех детей, и всех детей, и т. Д.) В элемент управления TreeView без особых хлопот:

myTreeView.Nodes.Add(myInstanceOfITreeNode);

С учетом вышесказанного, нет большого преимущества в работе с объектами стороннего интерфейса и преобразованием затем в представление TreeNode - вы могли бы просто работатьнепосредственно с фактическим классом узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...