public override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            Disposables.Add(addJobsSubscrition = new SerialDisposable());

            AddJobsCommand = CreateCommand(new ObservableCommand(CanAddJobs()), OnAddJobs);
            SelectAllJobsCommand = CreateCommand(new ObservableCommand(), OnSelectAllJobs);
            FilterJobsCommand = CreateCommand(new ObservableCommand(), OnFilterJobs);

            Disposables.Add(this.GetPropertyValues(x => x.FilterText)
                .Where(f => f != null && Jobs.Filter != f)
                .Sample(TimeSpan.FromMilliseconds(200), schedulerAccessor.UserInterface)
                .Select(filter => Observable.ToAsync(() => Jobs.Filter = filter, schedulerAccessor.Background)())
                .Switch()
                .ObserveOn(schedulerAccessor.UserInterface)
                .Subscribe(_ => State = (Jobs.Count == 0)
                    ? AddJobsViewState.NoResults
                    : AddJobsViewState.Results));

            SelectedJobs = new ObservableCollection<Job>();

            var query = e.Uri.GetQueryValues();

            if (!query.ContainsKey(BuildServerIdKey))
            {
                navigationService.GoBack();
                return;
            }

            IsSelectionEnabled = true;

            int buildServerId = Int32.Parse(query[BuildServerIdKey]);

            StartLoading(Strings.FindingJobsStatusMessage);

            BuildServer = jobRepository.GetBuildServer(buildServerId);

            this.State = AddJobsViewState.Loading;

            jobProviderFactory
                .Get(BuildServer.Provider)
                .GetJobsObservableAsync(BuildServer)
                .Select(jobs => RemoveExistingJobs(BuildServer, jobs))
                .Select(jobs => jobs.Select(CreateAvailableJob)
                    .OrderBy(j => j.Job.Name)
                    .ToList()
                )
                .ObserveOn(schedulerAccessor.UserInterface)
                .Finally(StopLoading)
                .Subscribe(loadedJobs =>
                {
                    existingJobCount = jobController.GetJobs().Count;

                    allJobs = loadedJobs;
                    Jobs = new FilteredObservableCollection<AvailableJob>(loadedJobs, FilterJob, schedulerAccessor.UserInterface);

                    State = (Jobs.Count > 0)
                        ? AddJobsViewState.Results
                        : AddJobsViewState.NoResults;
                }, ex =>
                {
                    ErrorDescription = WebExceptionService.GetDisplayMessage(ex);
                    State = AddJobsViewState.Error;
                });
        }
        public override void OnBackKeyPress(CancelEventArgs e)
        {
            base.OnBackKeyPress(e);

            if (ShowFilter)
            {
                Jobs.Filter = null;
                FilterText = null;
                ShowFilter = false;

                State = Jobs.Count == 0
                    ? AddJobsViewState.NoResults
                    : AddJobsViewState.Results;

                e.Cancel = true;
            }
            else
            {
                navigationService.GoBackToAny(ViewUris.SelectBuildServer, ViewUris.ListJobs);
            }
        }