public void Rebuild() { CommandTreeNode _root = Root.Childs.FirstOrDefault(); if (_root != null) { _root.Rebuild(true); } }
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); } } } } } } }