protected override void OnInitialize() { base.OnInitialize(); RxQuery(s => { return(s.Query <Catalog>() .Join(s.Query <Stock>(), catalog => catalog.Id, stock => stock.ProductId, (catalog, stock) => new { catalog, stock }) .Where(p => p.stock.Status == StockStatus.Available) .Select(c => c.catalog) .OrderBy(c => c.Name) .Distinct() .ToArray() .ToList()); }).Subscribe(Catalogs); Catalogs .Changed() .Throttle(TimeSpan.FromMilliseconds(30), Scheduler) .Subscribe(_ => { CurrentCatalog.Value = (Catalogs.Value ?? Enumerable.Empty <Catalog>()).FirstOrDefault(); }); CurrentCatalog .Changed() .Select(_ => RxQuery(LoadAddressStock)) .Switch() .Subscribe(AddressStock, CloseCancellation.Token); AddressStock .Changed() .Throttle(TimeSpan.FromMilliseconds(30), Scheduler) .Subscribe(_ => { CurrentAddressStock.Value = (AddressStock.Value ?? Enumerable.Empty <AddressStock>()).FirstOrDefault(); }); CurrentAddressStock .Changed() .Select(_ => RxQuery(LoadStoks)) .Switch() .Subscribe(Stocks, CloseCancellation.Token); Stocks .Changed() .Throttle(TimeSpan.FromMilliseconds(30), Scheduler) .Subscribe(_ => { CurrentStock.Value = (Stocks.Value ?? Enumerable.Empty <Stock>()).FirstOrDefault(); }); CurrentStock .Changed() .Select(_ => RxQuery(LoadStockActions)) .Switch() .Subscribe(StockActions, CloseCancellation.Token); StockActions .Changed() .Throttle(TimeSpan.FromMilliseconds(30), Scheduler) .Subscribe(_ => { CurrentStockAction.Value = (StockActions.Value ?? Enumerable.Empty <StockAction>()).FirstOrDefault(); }); }