/// <summary>
        /// event override to populate subitem
        /// </summary>
        /// <param name="e"></param>
        protected override void OnExpanded(RoutedEventArgs e)
        {
            base.OnExpanded(e);

            foreach (object obj in Items)
            {
                DirectoryTreeViewItem item = obj as DirectoryTreeViewItem;
                item.Populate();
            }
        }
        public void RefreshTree()
        {
            BeginInit();
            Items.Clear();

            //Obtain the disk drivers
            DriveInfo[] drivers = DriveInfo.GetDrives();

            foreach (DriveInfo drive in drivers)
            {
                char chDrive = drive.Name.ToUpper()[0];
                if (chDrive == 'F')
                {
                    DirectoryTreeViewItem item = new DirectoryTreeViewItem(drive.RootDirectory);

                    //display ...
                    if (chDrive != 'A' && chDrive != 'B' && drive.IsReady && drive.VolumeLabel.Length > 0)
                    {
                        item.Text = string.Format("{0}  ({1})", drive.VolumeLabel, drive.Name);
                    }
                    else
                    {
                        item.Text = string.Format("{0}  ({1})", drive.DriveType, drive.Name);
                    }

                    Items.Add(item);

                    if (chDrive != 'A' && chDrive != 'B' && drive.IsReady)
                    {
                        item.Populate();
                    }
                }
                else
                {
                    continue;
                }
            }

            EndInit();
        }