private async Task SelectMenuAsync(SearchButtonViewModel sbm) { Log($"Selected menu {sbm?.SearchTitle}"); await Task.Run(() => { this.SelectMenu(sbm); }); }
/// <summary> /// Select a menu button /// </summary> /// <returns></returns> private void SelectMenu(SearchButtonViewModel searchButtonViewModel) { if (IsBusy) { Log($"Searching busy..."); return; } var menuComponent = searchButtonViewModel.MenuComponent; if (menuComponent.GetType() == typeof(Menu)) { Log("Menu Selected", Category.Debug); //Check if has children and return if has children if (menuComponent.GetChild(0) != null) { this.UpdateSearchButtons(menuComponent); return; } } //Treat as MenuItem var menuName = menuComponent?.Name; //Return back if menu is Back or IsBusy if (menuName == "Back") { if (menuComponent.Parent.Name == "Root") { this.UpdateSearchButtons(this.mCreator._rootMenu); } else { this.UpdateSearchButtons(menuComponent.Parent); } return; } NavigationParameters navParams = null; string viewName = string.Empty; if (menuComponent?.ExtraSearchType != ExtraSearchType.None) { IsBusy = true; Log($"Navigating SearchedSongs with extra search type"); navParams = new NavigationParameters(); navParams.Add("extra_search", menuComponent.ExtraSearchType); viewName = ViewNames.SearchedSongsView; } else if (menuComponent?.SearchString == "SEARCH") { switch (menuName) { case "A-Z": viewName = ViewNames.AToZSearchView; break; case "SEARCH": viewName = ViewNames.SearchView; break; case "SONG SEARCH": viewName = ViewNames.InstantSearch; break; default: break; } } else if (menuName == "DJ Horsify" || menuName == "Filter" || menuName == "Database Stats") { if (menuName == "DJ Horsify") { viewName = ViewNames.DjHorsifyView; } else if (menuName == "Filter") { viewName = ViewNames.FilterCreatorView; } } else { navParams = NavigationHelper .CreateSearchFilterNavigation(menuComponent.SearchType, menuComponent.SearchString != null ? menuComponent.SearchString : menuComponent.Name); viewName = ViewNames.SearchedSongsView; } Log($"Navigating{viewName}"); if (navParams != null) { Log($"View params available, setting sidebar busy."); IsBusy = true; } //Request nav on the main thread Application.Current.Dispatcher.Invoke(() => { _regionManager.RequestNavigate(Regions.ContentRegion, viewName, navParams); }); }