Ejemplo n.º 1
0
        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);
        }