private void RefreshMainComboListItem(ComboItem selected)
        {
            MainViewItems.Clear();
            Func <ViewItem, bool> predict = item => true;

            if (!selected.IsAll)
            {
                if (selected.IsUncategorized)
                {
                    predict = item => item.Mod.Mod.Category.Count == 0;
                }
                else if (selected.IsIgnoreList)
                {
                    predict = item => item.Mod.IsIgnoreCollision;
                }
                else if (selected.IsConflicted)
                {
                    predict = item => item.Mod.IsHaveCollision;
                }
                else
                {
                    predict = item => {
                        if (item.Mod.Mod.Category.Contains(selected.Category as L4D2Type.Category))
                        {
                            return(true);
                        }
                        foreach (var sub in item.Mod.Mod.Category)
                        {
                            if (sub.Parent == (selected.Category as L4D2Type.Category))
                            {
                                return(true);
                            }
                        }
                        return(false);
                    }
                };
            }
            MainViewItems.AddRange(AllViewItems.Where(predict));
        }
        private void RefreshSubComboListItem(ComboItem selected)
        {
            SubViewItems.Clear();
            Func <ViewItem, bool> predict = (item) => true;

            if (!selected.IsAll)
            {
                var category = (SubComboBox.SelectedItem as ComboItem)?.Value as L4D2Type.Category;
                if (selected.IsUncategorized)
                {
                    predict = item =>
                    {
                        var main = (MainComboBox.SelectedItem as ComboItem)?.Value as L4D2Type.Category;
                        Logging.Assert(main != null);
                        var all  = main.Children;
                        var have = item.Mod.Mod.Category;
                        return(have.Union(all).Count() == 0);
                    }
                }
                ;
                else if (selected.IsIgnoreList)
                {
                    predict = item => item.Mod.IsIgnoreCollision;
                }
                else if (selected.IsConflicted)
                {
                    predict = item => item.Mod.IsHaveCollision;
                }
                else
                {
                    predict = item => item.Mod.Mod.Category.Contains(category);
                }
            }
            SubViewItems.AddRange(MainViewItems.Where(predict));
            UpdateSearch();
        }