示例#1
0
        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);
        }
示例#2
0
        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();
        }
示例#3
0
        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);
        }
示例#4
0
 private IObservable <SyncState> syncStatesUntilAndIncludingSleep()
 => StateObservable.TakeWhile(s => s != Sleep)
 .Concat(Observable.Return(Sleep))
 .ConnectedReplay();