// gets a certain item in the current tree view nodes collection private static TreeNodeViewModel TryFindItem(IEnumerable <TreeNodeViewModel> nodes, TreeNodeViewModel item) { if (item == null) { return(null); } TreeNodeViewModel output; output = nodes.Where(n => n.ID == item.ID && n.Type == item.Type).FirstOrDefault(); if (output != null) { return(output); } else { foreach (var node in nodes) { output = TryFindItem(node.Children, item); if (output != null) { return(output); } } } return(null); }
public static ObservableCollection <TreeNodeViewModel> DrawTree(Folder rootfolder, List <Folder> folderlist, TreeNodeViewModel selectedItem) { // ищем рут var root = rootfolder; // список детей рута var rootFolders = GetChildren(root.ID, folderlist); // список файлов в руте var rootDocuments = GetChildren(root); // массив представлений элеметов дерева var viewsArray = new ObservableCollection <TreeNodeViewModel>(); // рисуем файлы рута foreach (var document in rootDocuments) { viewsArray.Add(new TreeNodeViewModel(document.ID, document.Name, "Document")); } // обсчитываем и рисуем потомков рута foreach (Folder fol in rootFolders) { viewsArray.Add(DrawNode(fol, folderlist)); } // handle selected item applying if (selectedItem != null) { var item = TryFindItem(viewsArray, selectedItem); if (item != null) { item.IsSelected = true; } } return(viewsArray); }