/// <summary>
        ///     Inits the elements.
        /// </summary>
        /// <param name="decorator">The decorator.</param>
        /// <param name="page">The page.</param>
        public static void InitElements(IPropertyDecorator decorator, object page)
        {
            var proxyIn = page.GetType();

            while (proxyIn != typeof(object))
            {
                ProxyFields(decorator, page, proxyIn);
                proxyIn = proxyIn.BaseType;
            }
        }
        /// <summary>
        ///     Proxies the fields.
        /// </summary>
        /// <param name="decorator">The decorator.</param>
        /// <param name="page">The page.</param>
        /// <param name="proxyIn">The proxy in.</param>
        private static void ProxyFields(IPropertyDecorator decorator, object page, Type proxyIn)
        {
            var fields =
                proxyIn.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance |
                                      BindingFlags.DeclaredOnly).Where(p => p.CanRead && p.CanWrite).ToArray();

            foreach (var property in fields)
            {
                var value = decorator.Decorate(property);
                if (value != null)
                {
                    property.SetValue(page, value);
                }
            }
        }