/// <summary>
        /// Looks for and returns the matching item. Will load additional sections if not found.
        /// </summary>
        /// <param name="identifier"></param>
        /// <returns></returns>
        public BaseItemWP Find(Guid identifier, FindType type = FindType.All)
        {
            if (identifier == Guid.Empty)
            {
                return(null);
            }

            BaseItemWP found = FindFromLoaded(identifier);

            if (found != null)
            {
                return(found);
            }

            //make sure everything's loaded
            if (type.HasFlag(FindType.Semesters))
            {
                foreach (SemesterSection s in SemesterSections)
                {
                    s.Load();
                }
            }

            if (type.HasFlag(FindType.Grades))
            {
                foreach (GradesSection g in GradesSections)
                {
                    g.Load();
                }
            }

            //try again
            return(FindFromLoaded(identifier));
        }
        public void AssignToSection(BaseItemWP item, BaseItemWP parent)
        {
            item.Parent         = parent;
            item.AccountSection = parent.AccountSection;
            item.Section        = this;

            AccountSection.AddLoadedItem(item);
        }
 public void RemoveLoadedItem(BaseItemWP item)
 {
     _loadedItems.Remove(item.Identifier);
 }
 public void AddLoadedItem(BaseItemWP item)
 {
     _loadedItems[item.Identifier] = item;
 }
 protected void loaded(BaseItemWP item, BaseItemWP parent)
 {
     AssignToSection(item, parent);
 }