private List <Artist> FilterDeeperThenArtist(bool includeGenre)
        {
            var tmpArtists =
                allArtists.Where(a => a.Name.ToUpper().Contains(ArtistFilter.ToUpper())).ToList();

            var finalList = new List <Artist>();

            foreach (var a in tmpArtists)
            {
                ResetHighlight(a);

                var query = a.Albums.
                            Where(al => al.Name.ToUpper().Contains(AlbumFilter.ToUpper()));

                if (includeGenre)
                {
                    query = query.Where(al => al.Genres.Contains(new Genre()
                    {
                        Name = GenreFilter
                    }, new GenreByNameComparer()));
                }

                if (query.Count() > 0)
                {
                    finalList.Add(a);
                }

                foreach (var ma in query)
                {
                    ((TreeTag)ma.OptionalTag).IsHighlighted = true;
                }
            }

            return(finalList);
        }
        private void OnFilterChanged(FilterType ft)
        {
            if (Artists == null)
            {
                return;
            }

            switch (ft)
            {
            case FilterType.Artist:
            {
                Artists = allArtists.Where(a => a.Name.ToUpper().Contains(ArtistFilter.ToUpper()));
                foreach (var a in Artists)
                {
                    ResetHighlight(a);
                }
            }
            break;

            case FilterType.Album:
                Artists = FilterDeeperThenArtist(false);
                break;

            case FilterType.Genre:
                Artists = FilterDeeperThenArtist(true);
                break;
            }
        }