private async Task startSearch(string Query, bool AddToStack = true) { if (isSearchProcess) { return; } if (prevResults != null) { if (prevResults.Query == Query) { return; } } VisualStateManager.GoToState(this, "Search", true); isSearchProcess = true; this.DefaultViewModel["Items"] = null; ObservableCollection <PictureSearchResult> results = await processSearch(Query); bool success = true; if (results != null) { VisualStateManager.GoToState(this, "Normal", true); } else { VisualStateManager.GoToState(this, "NotFound", true); success = false; } this.DefaultViewModel["Items"] = results; // Add query to back stack if (AddToStack && prevResults != null) { backStack.Add(prevResults); this.DefaultViewModel["CanGoBack"] = true; } prevResults = new QuerySearchResults(); prevResults.Query = Query; prevResults.Results = results; prevResults.IsSuccess = success; isSearchProcess = false; }
/// <summary> /// Заполняет страницу содержимым, передаваемым в процессе навигации. Также предоставляется любое сохраненное состояние /// при повторном создании страницы из предыдущего сеанса. /// </summary> /// <param name="navigationParameter">Значение параметра, передаваемое /// <see cref="Frame.Navigate(Type, Object)"/> при первоначальном запросе этой страницы. /// </param> /// <param name="pageState">Словарь состояния, сохраненного данной страницей в ходе предыдущего /// сеанса. Это значение будет равно NULL при первом посещении страницы.</param> protected override void LoadState(Object navigationParameter, Dictionary <String, Object> pageState) { this.DefaultViewModel["CanGoBack"] = false; backStack = new List <QuerySearchResults>(); prevResults = null; isSearchProcess = false; if (pageState == null) { this.DefaultViewModel["WordToSearch"] = ExampleSearchSource.RandomSearchExample; VisualStateManager.GoToState(this, "Start", true); } else { string prevSearch = (string)pageState["WordToSearch"]; //this.DefaultViewModel["WordToSearch"] = prevSearch; //startSearch(prevSearch); SearchFor(prevSearch); } }
protected override void GoBack(object sender, RoutedEventArgs e) { int lastIndex = backStack.Count - 1; QuerySearchResults result = backStack[lastIndex]; backStack.RemoveAt(lastIndex); if (backStack.Count == 0) { this.DefaultViewModel["CanGoBack"] = false; } this.DefaultViewModel["Items"] = result.Results; this.DefaultViewModel["WordToSearch"] = result.Query; if (result.IsSuccess) { VisualStateManager.GoToState(this, "Normal", true); } else { VisualStateManager.GoToState(this, "NotFound", true); } }