2016-06-28 17 views
0

Ich muss ein Programm erstellen, das eine Liste aller Unterordner in einem bestimmten Verzeichnis enthält. Nachdem Sie auf einen der Ordner geklickt haben, sollte ein anderer ListView Dateien anzeigen, die er enthält. Was ist der beste Weg, dies zu tun? Ich weiß Sie können alle Dateien im Ordner zu ListView laden, aber können Sie eine Liste von Unterordnern laden? Wie kann ich dem Programm mitteilen, welcher Unterordner ausgewählt wurde, damit er seine Dateien auflisten kann?Laden Sie alle Ordner im Verzeichnis zu ListView WPF

Antwort

-1

Ich habe ein Beispiel für Sie mit einem ListBox Sie können es zu ListView ändern. Lassen Sie LBFolders ist eine Listbox, die die Liste der Unterordner anzeigen wird, und LBFFiles ist ein anderes Listbox zum Anzeigen der Liste der Dateien, die zweite wird basierend auf dem ausgewählten Element von der ersten ausgefüllt. Lassen Sie uns eine Klasse für Easy Binding definieren und lassen Sie mich es als ListViewItem nennen. Betrachten Sie nun den Xaml-Code für zwei ListBoxen.

<ListBox x:Name="LBFolders" Width="220px" BorderThickness="0" ItemsSource="{Binding}" Height="310"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
<ListBox x:Name="LBFFiles" Width="220px" BorderThickness="0" ItemsSource="{Binding}" Height="310" Canvas.Left="250"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Jetzt brauchen wir zwei Methoden definieren, die den Verzeichnispfad als Eingabe akzeptiert, und man wird die Unterverzeichnisse holen und die DirectoryListview binden und die anderen Pfad des gewählten Verzeichnisses übernehmen und die zweite List-Box füllt mit Dateien im ausgewählten Verzeichnis: das hintere Ende Code Bedenken Sie:

public MainWindow() 
{ 
    InitializeComponent(); 
    GetFolders(@"C:\Users\Vishnuraj\CloudDrive"); 
    LBFolders.SelectionChanged += new SelectionChangedEventHandler(LBFolders_SelectionChanged); 

} 
// triggers when an item selected in LBFolders 
private void LBFolders_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ListViewItem selectedItem = LBFolders.SelectedItem as ListViewItem; 
    GetFFiles(selectedItem.PathName); 
} 
// populates LBFolders listbox 
public void GetFolders(string DirectoryPath) 
{ 
    List<ListViewItem> ListViewItemDirectories = new List<ListViewItem>(); 
    DirectoryInfo Dinfo = new DirectoryInfo(DirectoryPath); 
    List<DirectoryInfo> ListOfDirectories = Dinfo.GetDirectories("*.*", SearchOption.AllDirectories).ToList(); 
    foreach (DirectoryInfo directory in ListOfDirectories) 
    { 
     ListViewItemDirectories.Add(new ListViewItem() { Name = directory.Name, PathName = directory.FullName }); 
    } 
    LBFolders.ItemsSource = ListViewItemDirectories; 
} 
// populates LBFFiles listbox 
public void GetFFiles(string DirectoryPath) 
{ 
    DirectoryInfo Dinfo = new DirectoryInfo(DirectoryPath); 
    List<ListViewItem> ListViewItemFiles = new List<ListViewItem>(); 
    List<FileInfo> ListOfFiles = Dinfo.GetFiles("*.*", SearchOption.TopDirectoryOnly).ToList(); 
    foreach (FileInfo directory in ListOfFiles) 
    { 
     ListViewItemFiles.Add(new ListViewItem() { Name = directory.Name, PathName = directory.FullName }); 
    } 
    LBFFiles.ItemsSource = ListViewItemFiles; 
} 

und schließlich der Schlüsselfaktor der ListViewItem Klasse wird als wie folgt definiert werden:

public class ListViewItem 
{ 
    public string Name { get; set; } 
    public string PathName { get; set; } 
}