private void ClearSearchArea()
 {
     //There is a fundamenal Architectural Mistake in the project in terms of Search Header hide/show logic in the SearchView
     //If SearchGroupTabs is not initialized after a search is performed - the search header is never visible, therefore a dummy initialization is necessary after an external search.
     SearchGroupTabs        = new TabsByName(new ObservableCollection <TabEntity>(new List <TabEntity>()), Database);
     this.CurrentTypedText  = this.CurrentSearchText = null;
     HeaderPagingVisibility = Visibility.Collapsed;
 }
 protected override void DataBind()
 {
     AllTabs     = new TabsByName(Database);
     Groups      = new BandByName(Database);
     TabsHistory = new TabsForHistory(6, Database);
     AssignBackGroundImageFromLastTab();
     SelectedItemIds = new List <int>();
 }
        private void SearchCompletedHandler(System.Net.DownloadStringCompletedEventArgs e)
        {
            SearchGroupTabs = null;
            //TODO examine e.Error
            if (e.Error == null)
            {
                var groupTabs = _tabSearcher.Entries.Where(FilterTab).
                                Select(entry => new TabEntity
                {
                    SearchId  = entry.Id,
                    SearchUrl = entry.Url,
                    Name      = entry.Name,
                    Group     = entry.Artist,
                    Rating    = entry.Rating,
                    Type      = entry.Type,
                    ImageUrl  = Database.GetTabTypeByName(entry.Type).ImageUrl,
                    Votes     = entry.Votes,
                    Version   = entry.Version
                });



                if (_sortOrder == ResultsSortOrder.Popularity)
                {
                    var artistName = CurrentSearchText.TransLiterate();
                    var grouped    = groupTabs.Where(t => t.Group.TransLiterate() == artistName).OrderByDescending(t => t.Votes);
                    IsNothingPopularFound = !grouped.Any();
                    SearchPopularTabs     = new ObservableCollection <TabEntity>(grouped.Take(100));
                    Deployment.Current.Dispatcher.BeginInvoke(() => { IsSearching = false; });
                    //Clear the Search Area (for the Search Page)
                    this.ClearSearchArea();
                }
                else
                {
                    IsNothingFound  = !groupTabs.Any();
                    Pages           = Enumerable.Range(1, _tabSearcher.Summary.PageCount).Select(p => p.ToString());
                    SearchGroupTabs = new TabsByName(new ObservableCollection <TabEntity>(groupTabs), Database);
                    Deployment.Current.Dispatcher.BeginInvoke(
                        () =>
                    {
                        if (Pages.Any())
                        {
                            SelectedPage = Pages.ElementAt(CurrentPageIndex - 1);
                        }
                        RaisePropertyChanged("SelectedPage");
                        AssignHeaderPagingUI(_tabSearcher.Summary.PageCount);
                        IsSearching = false;
                    });
                }
            }
            else
            {
                IsSearching = false;
                ClearSearchArea();
                Dialog.Show(AppResources.Search_Sorry, AppResources.Search_ServerUnavailable);
            }
        }
        public SearchViewModel(IMediaSearcherFactory mediaSearcherFactory, ITabSearcher tabSearcher, ConfigService configService, IDataContextService database, MessageHub hub)
            : base(database, hub)
        {
            _tabSearcher          = tabSearcher;
            _configService        = configService;
            _mediaSearcherFactory = mediaSearcherFactory;

            CurrentPageIndex  = 1;
            CurrentSearchText = String.Empty;

            HeaderPagingVisibility = Visibility.Collapsed;
            _searchGroupTabs       = new TabsByName(database, true);

            CreateCommands();
            RegisterEvents();
            SetConfigVariables();
        }