Ejemplo n.º 1
0
        public void Rebuild()
        {
            CommandTreeNode _root = Root.Childs.FirstOrDefault();

            if (_root != null)
            {
                _root.Rebuild(true);
            }
        }
Ejemplo n.º 2
0
        public override void Rebuild(bool recursive)
        {
            TreeNodeData data = (TreeNodeData)_node.Tag;

            if (IsCommand(data))
            {
                ClearAllNestedCommands(data.Command);

                foreach (TreeNode nestedNode in _node.Nodes)
                {
                    data = (TreeNodeData)nestedNode.Tag;
                    if (IsProperty(data))
                    {
                        if (IsEnumerableProperty(data, data.Property))
                        {
                            IEnumerable <CommandTreeNode> nestedCommandNodes = data.Node.Childs;

                            Type       _listType = data.Property.PropertyType;
                            object     commands  = _listType.GetConstructor(new Type[0]).Invoke(null);
                            MethodInfo addMethod = _listType.GetMethod("Add");

                            foreach (var nestedCommandNode in nestedCommandNodes)
                            {
                                addMethod.Invoke(commands, new object[] { nestedCommandNode.Data.Command });
                                if (recursive)
                                {
                                    nestedCommandNode.Rebuild(recursive);
                                }
                            }
                            data.Property.SetValue(data.Command, commands, null);
                        }
                        else
                        {
                            if (data.Node.HasChilds)
                            {
                                CommandTreeNode nestedCommandNode = data.Node.Childs.FirstOrDefault();
                                Command         nestedCommand     = nestedCommandNode.Data.Command;
                                data.Property.SetValue(data.Command, nestedCommand, null);
                                if (recursive)
                                {
                                    nestedCommandNode.Rebuild(recursive);
                                }
                            }
                        }
                    }
                }
            }
        }