public AdapterListViewModel(IAdapterScanner scanner, IUserDialogs dialogs, IViewModelManager vmManager) { this.scanner = scanner; this.Select = ReactiveCommand.CreateFromTask <IAdapter>(async adapter => { CrossBleAdapter.Current = adapter; await vmManager.Push <MainViewModel>(); }); this.Scan = ReactiveCommand.Create(() => { this.IsBusy = true; this.scanner .FindAdapters() .ObserveOn(RxApp.MainThreadScheduler) .Subscribe( this.Adapters.Add, async() => { this.IsBusy = false; switch (this.Adapters.Count) { case 0: dialogs.Alert("No BluetoothLE Adapters Found"); break; case 1: CrossBleAdapter.Current = this.Adapters.First(); await vmManager.Push <MainViewModel>(); break; } } ); }, this.WhenAny(x => x.IsBusy, x => !x.Value)); }
public AdapterListViewModel(INavigationService navigationService, IAdapterScanner adapterScanner, IUserDialogs dialogs) { this.adapterScanner = adapterScanner; this.navigationService = navigationService; this.Select = ReactiveCommand.CreateFromTask <IAdapter>(navigationService.NavToAdapter); this.Scan = ReactiveCommand.Create(() => { this.IsBusy = true; adapterScanner .FindAdapters() .ObserveOn(RxApp.MainThreadScheduler) .Subscribe( this.Adapters.Add, ex => dialogs.Alert(ex.ToString(), "Error"), async() => { this.IsBusy = false; switch (this.Adapters.Count) { case 0: dialogs.Alert("No BluetoothLE Adapters Found"); break; case 1: var adapter = this.Adapters.First(); await navigationService.NavToAdapter(adapter); break; } } ); }, this.WhenAny(x => x.IsBusy, x => !x.Value)); }