private void TreeView_Expanded(object sender, RoutedEventArgs e) { TreeViewItem currentTreeNode = sender as TreeViewItem; if (currentTreeNode == null) { return; } if (currentTreeNode.ItemsSource == null) { return; } DirInfo parentDirectory = currentTreeNode.Header as DirInfo; if (parentDirectory == null) { return; } foreach (DirInfo d in currentTreeNode.ItemsSource) { if (myViewModel.CurrentDirectory.Path.Equals(d.Path)) { d.IsSelected = true; d.IsExpanded = true; break; } } DirInfo _current = (currentTreeNode.DataContext as DirInfo); _current.IsSelected = true; if (currentTreeNode.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) { EventHandler itemsGenerated = null; itemsGenerated = delegate(object s, EventArgs args) { if ((s as ItemContainerGenerator).Status == GeneratorStatus.ContainersGenerated) { (s as ItemContainerGenerator).StatusChanged -= itemsGenerated; currentTreeNode.Dispatcher.BeginInvoke(DispatcherPriority.DataBind, (ThreadStart) delegate { Mouse.OverrideCursor = null; _current.SetValue(FileSystemTree.IsLoadingVisibleProperty, false); }); } }; currentTreeNode.ItemContainerGenerator.StatusChanged += itemsGenerated; Mouse.OverrideCursor = Cursors.Wait; _current.SetValue(FileSystemTree.IsLoadingVisibleProperty, true); try { Helpers.DoEvents(); } catch { } } foreach (DirInfo _child in _current.SubDirectories) { if (_current.IsChecked2.HasValue) { _child.IsChecked2 = _current.IsChecked2; } } e.Handled = true; }