/// <summary>
        /// Called when any parameter managed by this instance has changed the <see cref="IActivatable.IsActive"/> property.
        /// </summary>
        /// <param name="parameter">Must not be null.</param>
        protected virtual void HandleParameterActivityChanged(VstParameter parameter)
        {
            if (parameter == ActiveParameter && !parameter.IsActive)
            {
                ActiveParameter = null;
                ChangeValue(ParameterInfo.NullValue);
            }

            if (ActiveParameter == null && parameter.IsActive)
            {
                ActiveParameter = parameter;
                ChangeValue(parameter.Value);
            }
        }
        /// <summary>
        /// Called when any parameter managed by this instance has changed value.
        /// </summary>
        /// <param name="parameter">Must not be null.</param>
        protected virtual void HandleParameterValueChanged(VstParameter parameter)
        {
            if (parameter != ActiveParameter)
                return;

            ChangeValue(parameter.Value);
        }
        /// <summary>
        /// Subscribes to the events of the <paramref name="parameter"/>.
        /// </summary>
        /// <param name="parameter">Must not be null.</param>
        public void SubscribeTo(VstParameter parameter)
        {
            Throw.IfArgumentIsNull(parameter, "parameter");

            parameter.PropertyChanged += new PropertyChangedEventHandler(Parameter_PropertyChanged);
        }