[英]Clearing an ObservableCollection after populating it with entries
我有以下代碼用驅動器(RootDrive)和目錄填充Treeview。 但是,每個循環后如何清除目錄集合? 現在會發生什么的是,在所有驅動器的所有目錄添加到每個驅動器。 當我在Final語句中使用directory.Clear()時,沒有將目錄添加到每個驅動器。
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();
}
}
}
}
}
簡而言之,請改用局部變量。 您正在濫用finally指令。
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));
}
}
我認為您必須在第一個for循環之后更改代碼位並添加clear方法。 像下面...
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));
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.