void assemblyList_Assemblies_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Reset) { history.RemoveAll(_ => true); } if (e.OldItems != null) { var oldAssemblies = new HashSet <LoadedAssembly>(e.OldItems.Cast <LoadedAssembly>()); history.RemoveAll(n => n.TreeNodes.Any( nd => nd.AncestorsAndSelf().OfType <AssemblyTreeNode>().Any( a => oldAssemblies.Contains(a.LoadedAssembly)))); } if (CurrentAssemblyListChanged != null) { CurrentAssemblyListChanged(this, e); } }