public static List<SomeHierarchyViewModel> RetornaListaCodMaeNulo(List<CM_CTABM> ListaTodosItens, List<SomeHierarchyViewModel> list)
        {
            List<SomeHierarchyViewModel> outerItems = new List<SomeHierarchyViewModel>();

            bool _addEmptyLevel = true;

            foreach (CM_CTABM c in ListaTodosItens.Where(p => p.CodMae == ""))
            {
                //Cria um item primeiro nível vazio, caso o usuário não deseje selecionar nada
                if (_addEmptyLevel)
                {
                    CM_CTABM cm = new CM_CTABM();
                    cm.Texto = "                                          ";
                    cm.CodMae = "";
                    cm.CodInt = 0;
                    cm.Codigo = "0";

                    SomeHierarchyViewModel s = new SomeHierarchyViewModel(cm.Texto, null);
                    s.ItemAtual = cm;
                    s.CodInt = cm.CodInt;
                    outerItems.Add(s);
                    list.Add(s);

                    _addEmptyLevel = false;
                }

                SomeHierarchyViewModel o = new SomeHierarchyViewModel(c.Texto, null);
                o.ItemAtual = c;
                o.CodInt = c.CodInt;
                outerItems.Add(o);
                list.Add(o);
            }

            return outerItems;
        }
        public static List <GIInputCheckbox> Retorna(Tab tab, string checks)
        {
            if (Items.Count > 0)
            {
                Items.Clear();
            }

            if (LastItems.Count > 0)
            {
                LastItems.Clear();
            }

            var itemsCheck = RetornaListaItemsChecados(checks);


            List <GIInputCheckbox> list   = new List <GIInputCheckbox>();
            List <CM_CTABM>        listCM = new List <CM_CTABM>();


            string sql = "SELECT CodMae, Codigo, CodInt, Texto, Descr, Ativo FROM cm_ctabm WHERE Tab = " + TabToString(tab) + " ORDER BY 1,2";

            using (var bd = FactoryGI_LibBD.GI_LibBD(TipoBDAcessar.bdGI))
            {
                var dr = bd.AbreSQL(sql);

                while (dr.Read())
                {
                    var x = new CM_CTABM().Preenche(dr);

                    foreach (string s in itemsCheck)
                    {
                        var teste = s.Trim();
                        if (teste.Equals(x.CodInt))
                        {
                            x.Checked = true;
                        }
                    }

                    listCM.Add(x);
                }
            }


            List <SomeHierarchyViewModel> TodosMae = RetornaListaCodMaeNulo(listCM);

            foreach (var m in TodosMae)
            {
                RetornaListaFilhosRecursivo(listCM, m);
            }


            RetornaUltimoNivel(Items);

            foreach (var x in LastItems)
            {
                GIInputCheckbox check = new GIInputCheckbox();

                check.Content   = x.Title;
                check.Tag       = x.CodInt;
                check.IsChecked = x.IsChecked;

                list.Add(check);
            }



            return(list);
        }