2016-09-15 7 views
0

Ich versuche, eine Baumansicht mit Ordnern von gemischten Klassen zusammen zu ziehen. Die Stammordner sind eine Klasse und Unterordner sind andere, wie folgt aus:Baumansicht mit verschiedenen Ordner Klassen

Root Folder #1 <-- DirectoryItem class 
--Sub Folder <-- SubDirectoryItem class 
----file  <-- FileItem class 
Root Folder #2 <-- DirectoryItem class 
--Sub Folder <-- SubDirectoryItem class 
----file  <-- FileItem class 

Ich habe zwei verschiedene rekursive Methoden zu kombinieren, wurde versucht, so die Unterordner als „SubDirectoryItems“ abgerufen werden anstelle von „DirectoryItem“ Ich erspare dieser Code-Versuch wegen mangelnder Klärung, aber ich frage mich, ob es eine bessere Vorgehensweise gibt?

class ItemProvider 
{ 
    public List<Item> GetItems(string path, SearchOption searchOption) 
    { 
     var items = new List<Item>(); 
     var dirInfo = new DirectoryInfo(path); 

     foreach (var directory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)) 
     { 
      var item = new DirectoryItem 
      { 
       Name = directory.Name, 
       Path = directory.FullName, 
       Items = GetItems(directory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly)) 
     { 
      var item = new SubDirectoryItem() 
      { 
       Name = subdirectory.Name, 
       Path = subdirectory.FullName, 
       Items = GetItems(subdirectory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     foreach (var file in dirInfo.GetFiles()) 
     { 
      var item = new FileItem 
      { 
       Name = file.Name, 
       Path = file.FullName 
      }; 

      items.Add(item); 
     }  

     return items; 
    } 

} 

}

+0

Ich bin hier verwirrt. Was genau suchst du? Gehen Sie davon aus, dass es zu einem bestimmten Zeitpunkt nur einen Unterordner (Ebene wie keine weiteren Ordner in einem Unterordner) geben wird? Im Wesentlichen; Unterordner ist auch ein Verzeichniselement. – A3006

+0

Nein, ich möchte alle Ordner der obersten Ebene in (Pfad) einen Verzeichnisklassen-Typ angeben. Alles, was darunter liegt, sollte entweder der Typ von Dateien oder Unterordnern sein, egal wie tief die Baumebenen sind. Auf meiner Baumansicht werden die Top-Level-Verzeichnisse Buttons und alle möglichen Sachen haben und ich denke, das wird ein sauberer Weg sein, als das in xaml mit Daten-Triggern und ivalueconvertern und so zu unterscheiden. – ctalley5

Antwort

0

Ich war in der Lage, es herauszufinden. Ich habe die erste Liste TopDirectoryOnly erstellt und dann den Rest der Artikel über eine zweite Liste für AllDirectories eingezogen. Hier ist der Code für den Fall, dass es anderen Einsteigern (wie mir) hilft: