public ChildrenService(FilterMode filterMode, ItemFilter itemFilter, SortParameterData sortParameters) : base(item => item.Id) { var sort = sortParameters.WhenValueChanged(t => t.SelectedItem) .Select(prop => prop.Comparer); var modeFilter = itemFilter.WhenValueChanged(t => t.TreeMode) .Select(ModeFilter); var searchFilter = itemFilter.WhenValueChanged(t => t.SearchText) .Select(SearchFilter); var childNodes = this.Connect() .TransformToTree(item => item.ParentId) .Transform(item => { item.Item.InitializeChildNodes(item); return(item.Item); }) .DisposeMany() .Filter(modeFilter) .Filter(searchFilter) .Sort(sort) .Bind(this.childNodes) .Subscribe(); this.CleanUpTarget.Add(childNodes); }