public static PredefinedFilterCollection GetPredefinedFilters(MediaType mediaType, string fieldName) { string key = GetFilterKey(mediaType, fieldName); if (PredefinedFilterCache.ContainsKey(key)) { return(PredefinedFilterCache[key]); } PredefinedFilterCollection predefinedFilters = null; IEnumerable <string> uniqueValues = GetUniqueValues(mediaType, fieldName); if (uniqueValues != null) { predefinedFilters = new PredefinedFilterCollection(); PredefinedFilterCache.Add(key, predefinedFilters); foreach (string value in uniqueValues) { PredefinedFilter predefinedFilter = new PredefinedFilter { Name = value }; predefinedFilter.Filter = CriteriaOperator.Parse(String.Format("Contains([{0}], '{1}')", fieldName, value.Replace("'", "''"))); predefinedFilters.Add(predefinedFilter); } } return(predefinedFilters); }
static FilterHelper() { Messenger.Default.Register(listener, (CultureChangeMessage message) => { UniqueValuesCache.Remove("Movie_GenreIds"); UniqueValuesCache.Remove("Tv_GenreIds"); PredefinedFilterCache.Remove("Movie_GenreIds"); PredefinedFilterCache.Remove("Tv_GenreIds"); }); App.Repository.Movies.CollectionChanged += (s, e) => { if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Remove) { List <string> expiredKeys = PredefinedFilterCache.Keys.Where(x => x.StartsWith("Movie_") && !x.EndsWith("GenreIds")).ToList(); foreach (string key in expiredKeys) { UniqueValuesCache.Remove(key); PredefinedFilterCache.Remove(key); } } }; App.Repository.TvShows.CollectionChanged += (s, e) => { if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Remove) { List <string> expiredKeys = PredefinedFilterCache.Keys.Where(x => x.StartsWith("Tv_") && !x.EndsWith("GenreIds")).ToList(); foreach (string key in expiredKeys) { UniqueValuesCache.Remove(key); PredefinedFilterCache.Remove(key); } } }; }