//****************************************

        internal void Execute(GuiPresenter parent, string commandName)
        {               //****************************************
            GuiPresenter       CurrentPresenter = parent;
            GuiCommandTemplate MyTemplate;

            //****************************************

            while (CurrentPresenter != null)
            {
                MyTemplate = CurrentPresenter.Host.GetCommandTemplate(CurrentPresenter, commandName);

                if (MyTemplate != null && (!MyTemplate.CanCheckExecute || MyTemplate.CheckExecute(CurrentPresenter)))
                {
                    MyTemplate.Execute(CurrentPresenter);

                    return;
                }

                CurrentPresenter = CurrentPresenter.Parent;
            }

            // Not found on the parent, try the active context
            if (parent != _ActivePresenter)
            {
                Execute(_ActivePresenter, commandName);

                return;
            }

            Log.Warning("Command {0} was not found in the Presenter hierarchy", commandName);

            //throw new InvalidOperationException(string.Format("Command {0} was not found in the Presenter hierarchy", commandName));
        }