Browse Source

Fixed InvalidOperationException when deleting nodes.

pull/1/head
Daniel Grunwald 15 years ago
parent
commit
3a6574e27d
  1. 14
      SharpTreeView/SharpTreeView.cs

14
SharpTreeView/SharpTreeView.cs

@ -571,7 +571,7 @@ namespace ICSharpCode.TreeView
static void HandleExecuted_Delete(object sender, ExecutedRoutedEventArgs e) static void HandleExecuted_Delete(object sender, ExecutedRoutedEventArgs e)
{ {
SharpTreeView treeView = (SharpTreeView)sender; SharpTreeView treeView = (SharpTreeView)sender;
foreach (SharpTreeNode node in treeView.GetTopLevelSelection()) foreach (SharpTreeNode node in treeView.GetTopLevelSelection().ToArray())
node.Delete(); node.Delete();
} }
@ -581,10 +581,14 @@ namespace ICSharpCode.TreeView
e.CanExecute = treeView.GetTopLevelSelection().All(node => node.CanDelete()); e.CanExecute = treeView.GetTopLevelSelection().All(node => node.CanDelete());
} }
IEnumerable<SharpTreeNode> GetTopLevelSelection() /// <summary>
{ /// Gets the selected items which do not have any of their ancestors selected.
// TODO: return only top-level selection /// </summary>
return this.SelectedItems.OfType<SharpTreeNode>().ToList(); public IEnumerable<SharpTreeNode> GetTopLevelSelection()
{
var selection = this.SelectedItems.OfType<SharpTreeNode>();
var selectionHash = new HashSet<SharpTreeNode>(selection);
return selection.Where(item => item.Ancestors().All(a => !selectionHash.Contains(a)));
} }
#endregion #endregion

Loading…
Cancel
Save