2016-06-28 8 views
0

特定のディレクトリ内のすべてのサブフォルダのリストを含むプログラムをビルドする必要があります。いずれかのフォルダをクリックすると、別のListViewにそのファイルに含まれるファイルが表示されます。これを行う最善の方法は何ですか?私はあなたがListViewにフォルダ内のすべてのファイルを読み込むことができますが、サブフォルダのリストを読み込むことができます知っている?また、どのサブフォルダが選択されたのかをプログラムに伝えることができますので、ファイルをリストすることができます。ディレクトリ内のすべてのフォルダをListViewにロードするWPF

答えて

-1

私はListBoxを使用して、あなたのための例を持っています。それをListViewに変更することができます。 LBFoldersはサブフォルダのリストを表示するリストボックスで、LBFFilesはファイルリストを表示する別のリストボックスです。もう1つは最初から選択したアイテムに基づいて作成されます。簡単バインディングのクラスを定義して、それをListViewItemとしましょう。今度は、2つの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を結合し、他方は、選択したディレクトリのパスを受け入れるとを有する第2リストボックスに移入されますどの、2つのメソッドを定義する必要があります選択したディレクトリ内のファイル:バックエンドのコードを考えてみましょう:

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; } 
} 
関連する問題