public static void AddSubItems(this ITreeItemWrapper self, TypedTreeNodeItem <ITreeItemWrapper> mnode, ITreeItemWrapper mainItem, List <ITreeItemWrapper> items)
        {
            List <ITreeItemWrapper> subItems = items.FindAll(p => self.CheckGetSubItems(p, mainItem));

            foreach (ITreeItemWrapper subItem in subItems)
            {
                TypedTreeNodeItem <ITreeItemWrapper> subnode = self.GetTreeNodeItemByDataItem(subItem, mnode);

                self.AddSubItems(subnode, subItem, items);

                mnode.SubNodes.Add(subnode);
            }
        }
        public static List <TypedTreeNodeItem <ITreeItemWrapper> > GetAllTreeItems(this ITreeItemWrapper self)
        {
            List <TypedTreeNodeItem <ITreeItemWrapper> > nodes = new List <TypedTreeNodeItem <ITreeItemWrapper> >();

            List <ITreeItemWrapper> allItems = self.FindAllItems();

            if (allItems == null || allItems.Count <= 0)
            {
                return(nodes);
            }

            List <ITreeItemWrapper> topItems = allItems.FindAll(p => (self.CheckIsRoot(p)));

            foreach (ITreeItemWrapper topItem in topItems)
            {
                TypedTreeNodeItem <ITreeItemWrapper> topnode = self.GetTreeNodeItemByDataItem(topItem, null);

                self.AddSubItems(topnode, topItem, allItems);

                nodes.Add(topnode);
            }

            return(nodes);
        }