/// <summary>
        /// Initializes a new instance of <see cref="ComponentModelElement"/>.
        /// </summary>
        /// <param name="elementViewModel">The <see cref="ElementViewModel"/> that will be represented by this <see cref="IComponent"/>.</param>
        /// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that will be used to obtain services.</param>
        public ComponentModelElement(ElementViewModel elementViewModel, IServiceProvider serviceProvider)
        {
            this.site = new SiteImpl(this, serviceProvider);
            this.typeDescriptorProxy = new ViewModelTypeDescriptorProxy(elementViewModel);

            foreach (PropertyDescriptor property in ((ICustomTypeDescriptor)this).GetProperties())
            {
                property.AddValueChanged(this, (sender, args) =>
                {
                    var handler = PropertyChanged;
                    if (handler != null)
                    {
                        handler(this, new PropertyChangedEventArgs(property.Name));
                    }
                });
            }
        }
        /// <summary>
        /// Initializes a new instance of <see cref="ComponentModelElement"/>.
        /// </summary>
        /// <param name="elementViewModel">The <see cref="ElementViewModel"/> that will be represented by this <see cref="IComponent"/>.</param>
        /// <param name="serviceProvider">A <see cref="IServiceProvider"/> instance that will be used to obtain services.</param>
        public ComponentModelElement(ElementViewModel elementViewModel, IServiceProvider serviceProvider)
        {
            this.site = new SiteImpl(this, serviceProvider);    
            this.typeDescriptorProxy = new ViewModelTypeDescriptorProxy(elementViewModel);

            foreach (PropertyDescriptor property in ((ICustomTypeDescriptor)this).GetProperties())
            {
                property.AddValueChanged(this, (sender, args) => 
                {
                    var handler = PropertyChanged;
                    if (handler != null)
                    {
                        handler(this, new PropertyChangedEventArgs(property.Name) );
                    }
                });
            }
        }