public void FilterClicked(object param) { DeckType attrib; if (!Enum.TryParse <DeckType>(param.ToString(), out attrib)) { throw new ArgumentException(string.Format("Unknow value for DeckType={0}", param)); } //toggle filter value FilterButtonState[attrib] = !FilterButtonState[attrib]; //fires to many events on colection, will filter once for reset, and then for every selected attrib FilteredTypes.Clear(); //if all unslected - show all if (FilterButtonState.All(f => !f.Value)) { Enum.GetValues(typeof(DeckType)).OfType <DeckType>().All(t => { FilteredTypes.Add(t); return(true); }); } else { foreach (DeckType type in FilterButtonState.Where(f => f.Value).Select(f => f.Key)) { FilteredTypes.Add(type); } } messanger.Send( new DeckListFilterChanged(DeckListFilterChanged.Source.TypeFilter, FilteredTypes, showCompletedArenaRuns, showHiddenDecks, null, null), ControlMessangerContext.DeckList_DeckFilterControl); }
public void FilterCombo() { var filteredClasses = Utils.ClassAttributesHelper.FindClassByAttribute(FilterButtonState.Where(f => f.Value).Select(f => f.Key)).ToList(); if ((filteredClasses.Count >= 1) && (FilterButtonState.Any(f => f.Value))) { selectedClass = filteredClasses.OrderBy(fc => ClassAttributesHelper.Classes[fc].Count).First(); } else { selectedClass = null; } RaisePropertyChangedEvent("SelectedClass"); //remove classes not in use.Clear() will trigger binding, as SelectedClass will be set to null by framework foreach (DeckClass dc in FilteredClasses.ToList()) { if (!filteredClasses.Contains(dc)) { FilteredClasses.Remove(dc); } } // FilteredClasses.Clear(); foreach (DeckClass dc in filteredClasses) { if (!FilteredClasses.Contains(dc)) { int i = 0; IComparer <DeckClass> comparer = Comparer <DeckClass> .Default; while (i < FilteredClasses.Count && comparer.Compare(FilteredClasses[i], dc) < 0) { i++; } FilteredClasses.Insert(i, dc); } } messenger.Send(new DeckListFilterChanged(DeckListFilterChanged.Source.ClassFilter, null, null, null, SelectedClass, FilteredClasses), MessangerContext); }