2014-01-14 5 views
0

다음 코드는 드라이브 (RootDrive)와 디렉토리가있는 Treeview를 채 웁니다. 그러나 각 루프 후에 디렉토리 컬렉션을 지우려면 어떻게해야합니까? 이제는 어떻게됩니까 모두 디렉터리에 모두 드라이브가 각 드라이브에 추가됩니다. Finally 문에서 directories.Clear()를 사용할 때 각 드라이브에 디렉토리가 추가되지 않습니다.ObservableCollection을 항목으로 채운 후 지우기

static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>(); 

public MainWindow() 
{ 
    InitializeComponent(); 

    ObservableCollection<GetDirectory>directories = new ObservableCollection<GetDirectory>(); 

    foreach (DriveInfo di in DriveInfo.GetDrives()) 
    { 
     try 
     { 
      foreach (string s in Directory.GetDirectories(di.Name)) 
      { 
       directories.Add(new GetDirectory(s)); 
      }    
     } 

     catch (IOException) //drive is not ready, e.g. DVD drive 
     { 

     } 

     finally 
     { 
      RootDrive.Add(new GetDrive(di.Name, directories)); 
      directories.Clear(); 
     } 
    } 
} 

} 

}

+0

방금 ​​채운 컬렉션을 지우는 요령은 무엇입니까? – markmnl

+0

포인트가 새 항목으로 컬렉션을 채우는 중 –

답변

1

단순히 로컬 변수를 사용하십시오. 그리고 당신은 마침내 지시문을 오용하고 있습니다.

static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>(); 

public MainWindow() 
{ 
    InitializeComponent(); 

    foreach (DriveInfo di in DriveInfo.GetDrives()) 
    { 
     ObservableCollection<GetDirectory>directories = new ObservableCollection<GetDirectory>(); 
     try 
     { 
      foreach (string s in Directory.GetDirectories(di.Name)) 
      { 
       directories.Add(new GetDirectory(s)); 
      }    
     } 
     catch (IOException) //drive is not ready, e.g. DVD drive 
     { 
      // Handle it? 
     }  
     RootDrive.Add(new GetDrive(di.Name, directories)); 
    } 
} 
+0

고맙다. 나 자신을 보았어 야했다. –

0

나는 당신이 코드를 약간 수정 및 루프에 대한 첫 번째 후 명확한 방법을 추가해야합니다 생각합니다. 아래처럼 ...

static public ObservableCollection<GetDrive> RootDrive = new ObservableCollection<GetDrive>(); 

public MainWindow() 
{ 
    InitializeComponent(); 


    foreach (DriveInfo di in DriveInfo.GetDrives()) 
    { 
     try 
     { 
      directories.Clear(); 
      foreach (string s in Directory.GetDirectories(di.Name)) 
      { 
       directories.Add(new GetDirectory(s)); 
      }    
     } 

     catch (IOException) //drive is not ready, e.g. DVD drive 
     { 

     } 

     finally 
     { 
      RootDrive.Add(new GetDrive(di.Name, directories)); 

     } 
    } 
} 

} 
+0

와우, 빠릅니다.하지만 작동하지 않았습니다. 마지막 드라이브의 디렉토리 만 각 드라이브에 추가됩니다. –

+1

당신은 나에게 완전한 소스를 보낼 수 있습니까? 내가 완전한 소스를 가지고 있다면이 문제에서 반드시 당신을 도울 수있다. – Nil23

관련 문제