void ITemplateCommand.Apply(Stack <object> values)
            {
                var component = values.Peek();
                var existing  = property.GetValue(component, name);

                if (existing == null)
                {
                    throw new NotImplementedException();
                }

                values.Push(existing);
            }
        private void TryAggregation(PropertyTreeMetaObject value,
                                    QualifiedName name,
                                    PropertyDefinition property,
                                    IServiceProvider serviceProvider)
        {
            var current = property.GetValue(component, name);

            var enumerable = value.Component as IEnumerable;
            if (enumerable != null) {

                var items = enumerable;
                if (!ReferenceEquals(current, items) && enumerable.GetEnumerator().MoveNext()) {
                    MethodInfo mi = FindAddonMethod(current.GetType(), enumerable);

                    if (mi == null) {
                        var errors = serviceProvider.TryGetService(PropertyTreeBinderErrors.Default);
                        errors.NoAddMethodSupported(component.GetType(), PropertyTreeBinderImpl.FindFileLocation(serviceProvider));
                        return;
                    }

                    foreach (var item in items) {
                        mi.Invoke(current, new object[] { item });
                    }
                }
            }
        }
        public virtual PropertyTreeMetaObject CreateChild(PropertyDefinition property,
                                                          QualifiedName name,
                                                          PropertyTreeMetaObject ancestor)
        {
            var value = property.GetValue(this.Component, ancestor, name);
            var propertyType = property.PropertyType;

            // Refine property type if possible
            if (value == null) {
                return CreateChild(propertyType);
            }
            else {
                return CreateChild(value, propertyType);
            }
        }