/// <summary>
        /// Sorts the function.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sortProp">The sort property.</param>
        /// <param name="dictKey">The dictionary key.</param>
        protected virtual void SortFunction <T>(Func <IMod, T> sortProp, string dictKey)
        {
            if (FilteredMods != null)
            {
                var           sortOrder = sortOrders[dictKey];
                IComparer <T> comparer  = ResolveComparer <T>(dictKey);
                switch (sortOrder.SortOrder)
                {
                case Implementation.SortOrder.Asc:
                    if (comparer != null)
                    {
                        FilteredMods = FilteredMods.OrderBy(sortProp, comparer).ToObservableCollection();
                        AllMods      = AllMods.OrderBy(sortProp, comparer).ToHashSet();
                    }
                    else
                    {
                        FilteredMods = FilteredMods.OrderBy(sortProp).ToObservableCollection();
                        AllMods      = AllMods.OrderBy(sortProp).ToHashSet();
                    }
                    SelectedMod = null;
                    break;

                case Implementation.SortOrder.Desc:
                    if (comparer != null)
                    {
                        FilteredMods = FilteredMods.OrderByDescending(sortProp, comparer).ToObservableCollection();
                        AllMods      = AllMods.OrderByDescending(sortProp, comparer).ToHashSet();
                    }
                    else
                    {
                        FilteredMods = FilteredMods.OrderByDescending(sortProp).ToObservableCollection();
                        AllMods      = AllMods.OrderByDescending(sortProp).ToHashSet();
                    }
                    SelectedMod = null;
                    break;

                default:
                    break;
                }
                foreach (var sort in sortOrders.Where(p => p.Value != sortOrder))
                {
                    sort.Value.SetSortOrder(Implementation.SortOrder.None);
                }
                SaveState();
            }
        }