示例#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
        public ReactiveLoginViewModel(IUserService userService, IViewModelNavigationService navigationService)
        {
            _userService       = userService;
            _navigationService = navigationService;

            var canLogin = this.WhenAnyValue(m => m.UserName, m => m.Password)
                           .ObserveOn(RxApp.MainThreadScheduler)
                           .Select(t => IsValidCredentials(t.Item1, t.Item2));

            LoginCommand = ReactiveCommand.CreateFromObservable <Unit>(LoginAsync, canLogin);

            _isUiEnabled = LoginCommand
                           .IsExecuting
                           .ObserveOn(RxApp.MainThreadScheduler)
                           .Select(isExecuting => !isExecuting)
                           .ToProperty(this, m => m.IsUiEnabled, true);

            var unhandledException = LoginCommand
                                     .ThrownExceptions
                                     .ObserveOn(RxApp.MainThreadScheduler)
                                     .Select(ex => UnhandledErrorMessage);

            LoginCommand
            .ThrownExceptions
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(ExceptionObserver);

            LoginCommand
            .ObserveOn(RxApp.MainThreadScheduler)
            .Subscribe(Observer.Create <Unit>(OnSuccessfulLogin));

            RegisterCommand = ReactiveCommand.Create(Register);

            _error = unhandledException
                     .ObserveOn(RxApp.MainThreadScheduler)
                     .ToProperty(this, m => m.Error, string.Empty);
        }
示例#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);
        }
 public ScheduleViewModel(IViewModelNavigationService viewModelNavigationService)
 {
     this.viewModelNavigationService = viewModelNavigationService;
 }
 public LoginViewModel(IViewModelNavigationService viewModelNavigationService)
 {
     this.viewModelNavigationService = viewModelNavigationService;
 }
示例#6
0
 public SplashViewModel(ISettingService settingService, IViewModelNavigationService viewModelNavigationService)
 {
     _settingService             = settingService;
     _viewModelNavigationService = viewModelNavigationService;
 }