public SignInWithEmailAndPasswordPageViewModel(INavigationService navigationService, IPageDialogService pageDialogService) : base(navigationService) { _pageDialogService = pageDialogService; Title = "Sign In "; SignInCommand = new[] { Email.Select(s => string.IsNullOrEmpty(s)), Password.Select(s => string.IsNullOrEmpty(s)) }.CombineLatest(x => x.All(y => !y)) .ToAsyncReactiveCommand(); SignInCommand.Subscribe(async() => { try { var result = await CrossFirebaseAuth.Current .Instance .SignInWithEmailAndPasswordAsync(Email.Value, Password.Value); await NavigationService.GoBackAsync(result.User); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); await _pageDialogService.DisplayAlertAsync("Failure", e.Message, "OK"); } }); ResetPasswordCommand = new[] { Email.Select(s => string.IsNullOrEmpty(s)), }.CombineLatest(x => x.All(y => !y)) .ToAsyncReactiveCommand(); ResetPasswordCommand.Subscribe(async() => { try { await CrossFirebaseAuth.Current .Instance .SendPasswordResetEmailAsync(Email.Value); await _pageDialogService.DisplayAlertAsync(null, "Email has been sent.", "OK"); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); await _pageDialogService.DisplayAlertAsync("Failure", e.Message, "OK"); } }); }