簡體   English   中英

用條目填充ObservableCollection后清除它

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM