public ElementsModel()
        {
            List <TableItemModelBase> tableItems = new List <Models.TableItemModelBase>(_elements.ConvertAll(e => new ElementModel(e)));
            List <int> periods = new List <int>(), groups = new List <int>();

            tableItems.ForEach(e =>
            {
                ElementModel em = (ElementModel)e;
                int n           = periods.BinarySearch(em.Qualities.Period);
                if (n < 0)
                {
                    periods.Insert(~n, em.Qualities.Period);
                }
                n = groups.BinarySearch(em.Qualities.GroupBlock.Number);
                if (n < 0)
                {
                    groups.Insert(~n, em.Qualities.GroupBlock.Number);
                }
            });
            tableItems.AddRange(periods.ConvertAll(p => new PeriodLabelModel(p)));
            tableItems.AddRange(groups.ConvertAll(g => new GroupLabelModel(g)));
            tableItems.Add(new ElementCategoryKeyModel());
            tableItems.Add(new FShellPlaceholderModel(ElementCategory.Lanthanide));
            tableItems.Add(new FShellPlaceholderModel(ElementCategory.Actinide));
            tableItems.Add(new ElementDetailModel());
            tableItems.Add(new PPButtonModel());
            TableItems = tableItems;
        }