private void Filter(string oldFilter) { bool hadChildren = HasChildElements; if (FilterText != null && (String.IsNullOrWhiteSpace(oldFilter) || FilterText.StartsWith(oldFilter, StringComparison.OrdinalIgnoreCase))) { var toRemove = new List <EditorViewModel> (); foreach (var g in this.arranged) { foreach (var vm in g) { if (!MatchesFilter(vm)) { toRemove.Add(vm); } else if (vm is IFilterable) { var filterable = (IFilterable)vm; filterable.FilterText = FilterText; if (!filterable.HasChildElements) { toRemove.Add(vm); } } } } OnRemoveEditors(toRemove); } else { OnAddEditors(Properties); } if (hadChildren != HasChildElements) { OnPropertyChanged(nameof(HasChildElements)); } }