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));
            }
        }