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); }
public PagedDataViewer(ITradeService tradeService, SearchHints searchHints) { SearchHints = searchHints; SortParameters = new SortParameterData( tradeService.Live .Selecting(t => new TradeProxy(t)) .CollectionDisposing(), _consumer); AllData = new Computing <ObservableCollection <TradeProxy> >( () => SortParameters.SelectedItem.SortedData) .Filtering(t => t.Trade.CurrencyPair.Contains(SearchHints.SearchTextThrottled.Value, StringComparison.OrdinalIgnoreCase) || t.Trade.Customer.Contains(SearchHints.SearchTextThrottled.Value, StringComparison.OrdinalIgnoreCase)); Data = AllData.Paging(25, 1).For(_consumer); _nextPageCommand = new Command(() => Data.CurrentPage = Data.CurrentPage + 1, () => Data.CurrentPage < Data.PageCount); _previousPageCommand = new Command(() => Data.CurrentPage = Data.CurrentPage - 1, () => Data.CurrentPage > 1); }