diff --git a/Mear/Mear/ViewModels/AlbumViewModel.cs b/Mear/Mear/ViewModels/AlbumViewModel.cs index 61ea989..470f128 100644 --- a/Mear/Mear/ViewModels/AlbumViewModel.cs +++ b/Mear/Mear/ViewModels/AlbumViewModel.cs @@ -18,6 +18,7 @@ namespace Mear.ViewModels private ObservableCollection _albumItems; private Command _refreshAlbums; private Command _searchAlbumCommand; + private List _albums; #endregion @@ -52,19 +53,31 @@ namespace Mear.ViewModels #region Methods + public async void SearchAlbums(string text) + { + if (string.IsNullOrEmpty(text)) + { + _albumItems.Clear(); + _albums.ToList().ForEach(_albumItems.Add); + } + else + { + var albumItems = _albums.Where(a => a.Title.Contains(text)).ToList(); + _albumItems.Clear(); + albumItems.ToList().ForEach(_albumItems.Add); + } + } + private async Task PopulateAlbumsAsync() { try { var albumRepo = new RemoteAlbumRepository(); - var albums = albumRepo.RetrieveAlbums().OrderBy(a => a.Title).ToList(); + _albums = albumRepo.RetrieveAlbums().OrderBy(a => a.Title).ToList(); _albumItems.Clear(); - foreach (var album in albums) - { - _albumItems.Add(album); - } + _albums.ToList().ForEach(_albumItems.Add); } catch (Exception ex) { diff --git a/Mear/Mear/ViewModels/ArtistViewModel.cs b/Mear/Mear/ViewModels/ArtistViewModel.cs index df8be7a..7db2803 100644 --- a/Mear/Mear/ViewModels/ArtistViewModel.cs +++ b/Mear/Mear/ViewModels/ArtistViewModel.cs @@ -18,6 +18,7 @@ namespace Mear.ViewModels private ObservableCollection _artistItems; private Command _refreshArtists; private Command _searchArtistCommand; + private List _artists; #endregion @@ -52,19 +53,30 @@ namespace Mear.ViewModels #region Methods + public async void SearchArtists(string text) + { + if (string.IsNullOrEmpty(text)) + { + _artistItems.Clear(); + _artists.ToList().ForEach(_artistItems.Add); + } + else + { + var artistItems = _artists.Where(a => a.Name.Contains(text)).ToList(); + _artistItems.Clear(); + artistItems.ToList().ForEach(_artistItems.Add); + } + } private async Task PopulateArtistsAsync() { try { var artistRepo = new RemoteArtistRepository(); - var artists = artistRepo.RetrieveArtists().OrderBy(a => a.Name).ToList(); + _artists = artistRepo.RetrieveArtists().OrderBy(a => a.Name).ToList(); _artistItems.Clear(); - foreach (var artist in artists) - { - _artistItems.Add(artist); - } + _artists.ToList().ForEach(_artistItems.Add); } catch (Exception ex) { diff --git a/Mear/Mear/ViewModels/SongViewModel.cs b/Mear/Mear/ViewModels/SongViewModel.cs index 7d8cf68..4e8ce56 100644 --- a/Mear/Mear/ViewModels/SongViewModel.cs +++ b/Mear/Mear/ViewModels/SongViewModel.cs @@ -19,6 +19,7 @@ namespace Mear.ViewModels private ObservableCollection _songItems; private Command _refreshSongs; private Command _searchSongsCommand; + private List _songs; #endregion @@ -50,7 +51,7 @@ namespace Mear.ViewModels _refreshSongs = new Command(async () => await PopulateSongsAsync()); _searchSongsCommand = new Command(async () => await SearchSongText()); - PopulateSongs(); + PopulateSongsAsync(); } #endregion @@ -73,9 +74,22 @@ namespace Mear.ViewModels songs = rmtSongs; } - foreach (var song in songs) + songs.ToList().ForEach(_songItems.Add); + } + + public async void FilterSongs(string text) + { + if (string.IsNullOrEmpty(text)) { - _songItems.Add(song); + _songItems.Clear(); + _songs.ToList().ForEach(_songItems.Add); + } + else + { + var songItems = _songs.Where(s => s.Title.Contains(text) || + s.Artist.Contains(text)).ToList(); + _songItems.Clear(); + songItems.ToList().ForEach(_songItems.Add); } } @@ -107,23 +121,19 @@ namespace Mear.ViewModels var localSongRepo = new LocalSongRepository(); var lclSongs = localSongRepo.RetrieveSongs(); var rmtSongs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList(); - var songs = new List(); if (lclSongs != null) { lclSongs = lclSongs.OrderBy(s => s.Title).ToList(); - songs = MergeSongs(lclSongs, rmtSongs); + _songs = MergeSongs(lclSongs, rmtSongs); } else { - songs = rmtSongs; + _songs = rmtSongs; } _songItems.Clear(); - foreach (var song in songs) - { - _songItems.Add(song); - } + _songs.ToList().ForEach(_songItems.Add); } catch (Exception ex) { diff --git a/Mear/Mear/Views/AlbumView.xaml b/Mear/Mear/Views/AlbumView.xaml index 6cad220..cbb7413 100644 --- a/Mear/Mear/Views/AlbumView.xaml +++ b/Mear/Mear/Views/AlbumView.xaml @@ -16,7 +16,8 @@ Placeholder="Album" SearchCommand="{Binding SearchAlbumCommand}" SearchCommandParameter="{Binding SearchedText, Source=x:Reference Search}" - Text="{Binding SearchedText, Mode=TwoWay}" /> + Text="{Binding SearchedText, Mode=TwoWay}" + TextChanged="SearchAlbum_TextChanged" /> + Text="{Binding SearchedText, Mode=TwoWay}" + TextChanged="SearchArtist_TextChanged" /> + Text="{Binding SerachedText, Mode=TwoWay}" + TextChanged="SearchSong_TextChanged" >