2016-09-15 41 views
0

我想把樹視圖與混合類的文件夾放在一起。根文件夾是一類和子文件夾是另一個,就像這樣:樹視圖與不同的文件夾類

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

我一直在嘗試這樣的子文件夾被稱爲「SubDirectoryItems」而不是「DirectoryItem」我就饒檢索到兩個不同的遞歸方法相結合該代碼嘗試由於缺乏澄清,但我想知道是否有更好的方法?

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

我很困惑這裏。你究竟在尋找什麼?你是否假設在任何給定的時間點只有一個子文件夾(在子文件夾內沒有其他文件夾級別)?本質上;子文件夾也是一個目錄項。 – A3006

+0

不,我想在(路徑)中創建一個目錄類類型的所有頂級文件夾。無論樹層級有多深,任何東西都應該是文件或子文件夾類的類型。在我的樹形視圖中,頂級目錄將會有按鈕和各種東西,我認爲這將是一種更簡潔的方式,而不是用xaml與數據觸發器和ivalueconverters以及其他東西區分它。 – ctalley5

回答

0

我能弄明白。我創建了第一個列表TopDirectory,然後通過AllDirectories的第二個列表將其餘的項目拉入其中。這裏的代碼,以防它可以幫助其他任何初學者(如我):

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 = GetSubItems(directory.FullName, SearchOption.AllDirectories) 
      }; 

      items.Add(item); 
     } 

     return items; 
    } 

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


     foreach (var subdirectory in dirInfo.GetDirectories("*.*", SearchOption.AllDirectories)) 
     { 
      var item = new SubDirectoryItem() 
      { 
       Name = subdirectory.Name, 
       Path = subdirectory.FullName, 
       Items = GetSubItems(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; 
    } 

} 
相關問題