2016-06-28 2 views
0

특정 디렉토리의 모든 하위 폴더 목록을 포함하는 프로그램을 작성해야합니다. 폴더 중 하나를 클릭하면 다른 ListView에 포함 된 파일이 표시됩니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? ListView에 폴더의 모든 파일을로드 할 수 있지만 하위 폴더 목록을로드 할 수 있습니까? 또한 선택한 하위 폴더를 프로그램에 알릴 수 있으므로 파일을 나열 할 수 있습니까?디렉토리의 모든 폴더를 ListView로로드 WPF

답변

-1

ListBox을 사용하여 예제가 있습니다. ListView로 변경할 수 있습니다. LBFolders은 하위 폴더 목록을 표시하는 목록 상자이고, LBFFiles은 파일 목록을 표시 할 또 다른 목록이며, 두 번째 파일은 첫 번째 항목에서 선택한 항목을 기반으로 채워집니다. Easy Binding을위한 클래스를 정의하고 이것을 ListViewItem으로 부릅시다. 이제 두 개의 ListBox에 대한 Xaml 코드를 살펴 보겠습니다.

<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> 

이제 우리는 입력으로 디렉토리 경로를 받아 들일 것, 그리고 하나의 서브 디렉토리를 취득하고 DirectoryListview을 결합하고 다른 선택한 디렉토리의 경로를 승인하고 함께 두 번째 목록 상자를 채 웁니다 어느, 두 가지 방법을 정의 할 필요가 선택한 디렉토리 내 파일 : 백 엔드 코드를 고려하십시오

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; 
} 

을 그리고 마지막으로 중요한 요소는 ListViewItem 클래스는 다음과 같이 정의됩니다

public class ListViewItem 
{ 
    public string Name { get; set; } 
    public string PathName { get; set; } 
} 
관련 문제