Ejemplo n.º 1
0
        protected virtual List <ILifeCycle> NotifyParentVisibilityAndReturnNotLoadedControl(object node, bool isVisible)
        {
            var controlBase = node as ControlBaseViewModel;
            Queue <ControlBaseViewModel> queue    = new Queue <ControlBaseViewModel>();
            List <ILifeCycle>            controls = new List <ILifeCycle>();

            //preload the children of the root control.
            foreach (var child in controlBase.GetControlsIterator())
            {
                queue.Enqueue(child);
            }

            while (queue.Count > 0)
            {
                ControlBaseViewModel current = queue.Dequeue();
                if (current == null)
                {
                    continue;
                }
                if (current.VisibleState.HasFlag(VisibleState.Visible))
                {
                    foreach (var child in current.GetControlsIterator())
                    {
                        queue.Enqueue(child);
                    }
                }
                bool currVisibility = current.Visible;
                if (isVisible)
                {
                    current.VisibleState |= VisibleState.ParentVisible;
                    if (current.Visible && !current.Loaded)
                    {
                        controls.Add(current);
                    }
                }
                else
                {
                    current.VisibleState &= ~VisibleState.ParentVisible;
                }
                if (ViewManager != null && currVisibility != current.Visible)
                {
                    ViewManager.Events.PublishOrEnqueueEvent("VISIBLECHANGED", current, current, System.EventArgs.Empty);
                }
            }
            return(controls);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// This is a modified breath first search algorithm to fit with our necessity.
        /// </summary>
        public virtual void NotifyParentVisibility(object node, bool isVisible)
        {
            var controlBase = node as ControlBaseViewModel;
            Queue <ControlBaseViewModel> queue = new Queue <ControlBaseViewModel>();

            //preload the children of the root control.
            foreach (var child in controlBase.GetControlsIterator())
            {
                queue.Enqueue(child);
            }

            while (queue.Count > 0)
            {
                ControlBaseViewModel current = queue.Dequeue();
                if (current == null)
                {
                    continue;
                }

                if (!isVisible || current.VisibleState.HasFlag(VisibleState.Visible))
                {
                    foreach (var child in current.GetControlsIterator())
                    {
                        queue.Enqueue(child);
                    }
                }

                bool currVisibility = current.Visible;
                if (isVisible)
                {
                    current.VisibleState |= VisibleState.ParentVisible;
                }
                else
                {
                    current.VisibleState &= ~VisibleState.ParentVisible;
                }
                if (ViewManager != null && currVisibility != current.Visible)
                {
                    ViewManager.Events.PublishOrEnqueueEvent("VISIBLECHANGED", current, current, System.EventArgs.Empty);
                }
            }
        }