/// <summary>
        /// Creates the wrapper object property wrapper.
        /// </summary>
        private static PropertyDescriptor CreateWrapperObjectPropertyWrapper(TypeMetaData context, PropertyInfo property)
        {
            var actualReader = GetPropertyReader(property, context);
            var actualWriter = GetPropertyWriter(property, context);

            var reader = property.CanRead ? new Func <object, object>(o => actualReader.GetValue(o)) : null;
            var writer = property.CanWrite ? new Action <object, object>((o, v) => actualWriter.SetValue(o, v)) : null;

            var descriptor = new DelegatePropertyDescriptor(
                property.Name,
                property.DeclaringType,
                property.PropertyType,
                reader,
                writer
                );

            return(descriptor);
        }
        /// <summary>
        /// Creates the wrapped object property wrapper.
        /// </summary>
        private static PropertyDescriptor CreateWrappedObjectPropertyWrapper(TypeMetaData context, PropertyInfo property)
        {
            GetPropertyReader(property, context);
            GetPropertyWriter(property, context);

            var reader = property.CanRead ? new Func <object, object>(o => ((IEditable)o).ReadProperty(property)) : null;
            var writer = property.CanWrite ? new Action <object, object>((o, v) => ((IEditable)o).WriteProperty(property, v)) : null;

            var descriptor = new DelegatePropertyDescriptor(
                property.Name,
                property.DeclaringType,
                property.PropertyType,
                reader,
                writer
                );

            return(descriptor);
        }