/// <summary>
        /// Allows a programmer to request a remote mediaserver to change the metadata
        /// for this item.
        /// </summary>
        /// <param name="useThisMetadata">
        /// Media object that represents what the new metadata should be for the object.
        /// </param>
        /// <param name="Tag">
        /// Miscellaneous, user-provided object for tracking this
        /// asynchronous call. Can be used as a means to pass a
        /// user-defined "state object" at invoke-time so that
        /// the executed callback during results-processing can be
        /// aware of the component's state at the time of the call.
        /// </param>
        /// <param name="callback">
        /// Delegate executes when the results for the method are available.
        /// </param>
        /// <exception cref="Error_CannotGetParent">
        /// Thrown if the parent of this object is null.
        /// </exception>
        /// <exception cref="InvalidCastException">
        /// Thrown if this object's parent is not a
        /// <see cref="CpMediaContainer"/> object.
        /// </exception>
        public void RequestUpdateObject(IUPnPMedia useThisMetadata, object Tag, CpMediaDelegates.Delegate_ResultUpdateObject callback)
        {
            CpMediaContainer p = (CpMediaContainer)this.Parent;

            if (p != null)
            {
                p.RequestUpdateObject(this, useThisMetadata, Tag, callback);
            }
            else
            {
                throw new Error_CannotGetParent(this);
            }
        }