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);
        }