public ReactiveAddIncomeTransactionViewModel(ITransactionService transactionService, IViewModelNavigationService navigationService, ICategoriesService categoriesService, IUserDialogs userDialogs) { _transactionService = transactionService; _navigationService = navigationService; _categoriesService = categoriesService; var isValidCategory = this.WhenAnyValue(m => m.SelectedCategory) .Select(c => c != null); var isValidValue = this.WhenAnyValue(m => m.Value) .Select(IsValidValue); var canAddTransaction = isValidCategory.Merge(isValidValue); AddTransactionCommand = ReactiveCommand.CreateFromObservable <Unit>(AddTransactionAsync, canAddTransaction); GetCategories = ReactiveCommand.CreateFromObservable <Unit, IEnumerable <CategoryModel> >(GetCategoriesAsync); _categories = GetCategories .Select(categories => new ObservableCollection <CategoryModel>(categories)) .Select(categories => new ReadOnlyObservableCollection <CategoryModel>(categories)) .ToProperty(this, vm => vm.Categories); AddTransactionCommand.ThrownExceptions.Subscribe(ex => userDialogs.Alert(ex.Message)); AddTransactionCommand .Subscribe(Observer.Create <Unit>(OnAddTransactionComplete)); StateObservable .Where(s => s == ViewModelState.Disappered) .Subscribe(Observer.Create <ViewModelState>(ClearData)); StateObservable.Where(s => s == ViewModelState.Appeared) .Select(_ => Unit.Default) .InvokeCommand(GetCategories); }
protected AutomatonymousStateMachine() { _registrations = new Lazy <StateMachineRegistration[]>(GetRegistrations); _stateCache = new Dictionary <string, State <TInstance> >(); _eventCache = new Dictionary <string, StateMachineEvent <TInstance> >(); _eventObservers = new EventObservable <TInstance>(); _stateObservers = new StateObservable <TInstance>(); _initial = new StateMachineState <TInstance>(this, "Initial", _eventObservers); _stateCache[_initial.Name] = _initial; _final = new StateMachineState <TInstance>(this, "Final", _eventObservers); _stateCache[_final.Name] = _final; _accessor = new DefaultInstanceStateAccessor <TInstance>(this, _stateCache[Initial.Name], _stateObservers); _unhandledEventCallback = DefaultUnhandledEventCallback; _name = GetType().Name; RegisterImplicit(); }
public ReactiveHomeViewModel(IViewModelNavigationService navigationService, ITransactionService transactionService) { _navigationService = navigationService; _transactionService = transactionService; IncomeCommand = ReactiveCommand.Create(Income); OutcomeCommand = ReactiveCommand.Create(Outcome); GetTransactionsCommand = ReactiveCommand.CreateFromObservable <Unit, IEnumerable <TransactionModel> >(GetTransactions); GetCurrentBalanceCommand = ReactiveCommand.CreateFromObservable <Unit, decimal>(GetCurrentBalance); _transactions = GetTransactionsCommand .Select(transactions => transactions.OrderByDescending(t => t.Date)) .Select(ToObservableCollection) .Select(transactions => new ReadOnlyObservableCollection <TransactionModel>(transactions)) .ToProperty(this, m => m.Transactions); var currentBalanceObservable = GetCurrentBalanceCommand .Select(b => $"{b:C2}"); _currentBalance = currentBalanceObservable .ToProperty(this, m => m.CurrentBalance, string.Empty); _fullCurrentBalance = currentBalanceObservable .Select(s => $"Your balance is: {s}") .ToProperty(this, m => m.FullCurrentBalance, string.Empty); StateObservable .Where(state => state == ViewModelState.Appeared) .Select(s => Unit.Default) .InvokeCommand(GetCurrentBalanceCommand); StateObservable .Where(state => state == ViewModelState.Appeared) .Select(s => Unit.Default) .InvokeCommand(GetTransactionsCommand); }
private IObservable <SyncState> syncStatesUntilAndIncludingSleep() => StateObservable.TakeWhile(s => s != Sleep) .Concat(Observable.Return(Sleep)) .ConnectedReplay();