2014-03-13 61 views
3

我已經在WPF中創建了一個FOLDER BROWSER控件,並且工作正常,但只有一個硬編碼的驅動器。文件夾瀏覽器列出WPF中的所有系統驅動器

我也跟着這樣做,該文件是:

http://msdn.microsoft.com/en-us/library/bb546972%28v=vs.90%29.aspx

我希望把它列出系統中的所有驅動器樹視圖,而不是唯一的一個。

<Window.Resources> 
     <ObjectDataProvider x:Key="RootFolderDataProvider"> 
      <ObjectDataProvider.ObjectInstance> 
       <folderExplorer:FolderExplorer FullPath="e:\" /> 
      </ObjectDataProvider.ObjectInstance> 
     </ObjectDataProvider> 

     <HierarchicalDataTemplate 
      DataType = "{x:Type folderExplorer:FolderExplorer}" 
      ItemsSource = "{Binding Path=SubFolders}"> 
      <TextBlock Text="{Binding Path=Name}" /> 
     </HierarchicalDataTemplate> 
    </Window.Resources> 

<TreeView Grid.Column="0" 
        Name="RootTreeView" 
        Background="AliceBlue" 
        Foreground="Black" Grid.RowSpan="3" Margin="0,0,0,169"> 
      <TreeViewItem Header="Browse"> 
       <TreeViewItem.ItemsSource> 
        <Binding Source="{StaticResource RootFolderDataProvider}"> 
         <Binding.Path>SubFolders</Binding.Path> 
        </Binding> 
       </TreeViewItem.ItemsSource> 
      </TreeViewItem> 
     </TreeView> 

如果我填充在代碼樹視圖的背後,我的所有其他的代碼是打破..

如何使這個列表中的所有驅動器將是非常有益的任何建議。

+0

「我的代碼崩潰」對於您在這裏可以找到的開發人員社區沒有多大用處。請發佈更多信息,堆棧跟蹤,例外情況,複製源代碼等。 –

+0

對不起,如果我不清楚..我的意思是..如果我在後面的代碼中填充所有驅動器的樹視圖,子文件夾文件夾列表不起作用..正如期待'RootFolderDataProvider' .. – Akon

+0

快速說明,你想要它列出每個驅動器上的所有文件夾作爲一個巨大的列表,或每個驅動器然後每個驅動器上的文件夾作爲「子文件夾」? – BradleyDotNET

回答

3

首先,我們需要一個新類,稱之爲「DriveExplorer」。我保留鏈接示例中的「文件夾」名稱,您可能需要將其替換爲「FolderExplorer」。

首先,代碼:

public class DriveExplorer 
{ 
    private ObservableCollection<Folder> _folders; 
    public ObservableCollection<Folder> Folders 
    { 
     get 
     { 
      _folders = new ObservableCollection<Folder>(); 

      DriveInfo[] drives = DriveInfo.GetDrives(); 
      foreach (DriveInfo drive in drives) 
      { 
       //We only want drives with folders, "Fixed" is hard drives 
       if (drive.DriveType == DriveType.Fixed) 
       { 
        Folder newFolder = new Folder(); 
        newFolder.FullPath = drive.Name; 
        _folders.Add(newFolder); 
       } 
      } 
     } 
    } 
} 

現在爲它做什麼。就像「文件夾」,我們聲明一個ObservableCollection<Folder>的列表來存儲我們的「驅動器」。對於所有意圖和目的,驅動器只是我們以不同方式獲得的文件夾。然後,我們使用DriveInfo.GetDrives()獲取系統上的驅動器列表。

然後,使用「drive」作爲我們的迭代變量(MSDN),然後使用foreach(與示例代碼中的for循環做同樣的事情)迭代整個集合。我認爲我們只是想要硬盤,所以我們檢查DriveType是否爲「固定」。如果我們不關心類型,這個檢查可以被刪除。有關此功能的完整參考,請參見MSDN。最後,我們創建一個新的「文件夾」,其路徑設置爲驅動器盤符,就像您在XAML中做的一樣(並且樣例在其構造函數中)。

現在的XAML,我們需要一個非常類似的數據模板的一個你已經有(這是除了現有的):

<HierarchicalDataTemplate 
    DataType = "{x:Type folderExplorer:DriveExplorer}" 
    ItemsSource = "{Binding Path=Folders}"> 
    <TextBlock Text="{Binding Path=Name}" /> 
</HierarchicalDataTemplate> 

然後,我們只需要更改數據源到「DriveExplorer」:

<ObjectDataProvider x:Key="RootFolderDataProvider"> 
    <ObjectDataProvider.ObjectInstance> 
     <folderExplorer:DriveExplorer /> 
    </ObjectDataProvider.ObjectInstance> 
</ObjectDataProvider> 

這應該會給你想要的輸出。讓我知道如果我需要進行更正或澄清任何事情!

+0

謝謝..讓我試試這個......並讓你知道結果。 – Akon

+0

謝謝一堆..! – Akon

+0

很高興我能夠幫助! – BradleyDotNET

相關問題