/// <summary>
 /// Update the subgroups of this form group.
 /// </summary>
 /// <param name="order"></param>
 /// <param name="formType"></param>
 public void UpdateSubgroups(TraversalOptions order = TraversalOptions.Pre, FormNameType formType = FormNameType.Both)
 {
     foreach (var subnode in Subnodes.Values)
     {
         subnode.Update(order, formType);
     }
 }
        /// <summary>
        /// Update the forms in this form group.
        /// </summary>
        /// <param name="formType"></param>
        public void UpdateTop(FormNameType formType = FormNameType.Both)
        {
            switch (formType)
            {
            case FormNameType.Named:
                foreach (var item in Items.Values)
                {
                    item.Update();
                }
                break;

            case FormNameType.Anonymous:
                foreach (var item in AnonymousItems)
                {
                    item.Update();
                }
                break;

            case FormNameType.Both:
                foreach (var item in Items.Values)
                {
                    item.Update();
                }
                foreach (var item in AnonymousItems)
                {
                    item.Update();
                }
                break;
            }
        }
        /// <summary>
        /// Update all the Forms in this form group and it's subgroups, in the order
        /// specified by the TraversalOptions.
        ///
        /// You can specify to render only named forms, only anonymous forms, or both
        /// using the FormType parameter.
        /// </summary>
        /// <param name="order"></param>
        /// <param name="formType"></param>
        public void Update(TraversalOptions order = TraversalOptions.Pre, FormNameType formType = FormNameType.Both)
        {
            switch (order)
            {
            case TraversalOptions.Pre:
                UpdateSubgroups(order, formType);
                UpdateTop(formType);
                break;

            case TraversalOptions.Post:
                UpdateTop(formType);
                UpdateSubgroups(order, formType);
                break;

            case TraversalOptions.Top:
                UpdateTop(formType);
                break;

            default:
                break;
            }
        }