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