public SettingsViewModel( IScreen screen, ISettingsProvider settingsProvider, IFolderHelper folderHelper, IAppContext appContext) { HostScreen = screen; BackCommand = new ReactiveAsyncCommand(); BackCommand.RegisterAsyncAction(_ => HostScreen.Router.NavigateBack.Execute(null)); SelectFolder = new ReactiveAsyncCommand(); SelectFolder.RegisterAsyncAction(_ => { var result = folderHelper.SelectFolder(); if (result.Result == true) { UpdateLocation = result.Folder; } }, appContext.DispatcherScheduler); UpdateLocation = settingsProvider.UpdateLocation; _IsError = this.WhenAny(vm => vm.UpdateLocation, vm => vm.Value) .DistinctUntilChanged() .Throttle(TimeSpan.FromMilliseconds(500)) .ObserveOn(appContext.DispatcherScheduler) .Select(text => !IsUrlOrFolder(text)) .Do(error => { if (!error) { settingsProvider.UpdateLocation = UpdateLocation; } }) .ToProperty(this, vm => vm.IsError, setViaReflection: false); }