Example #1
0
        /// <summary>
        ///     Writes the provided value to the Item's <see cref="SourceItem"/> or <see cref="Provider"/>, depending on the value
        ///     of the <see cref="Source"/> property.
        /// </summary>
        /// <param name="value">The value to write.</param>
        /// <returns>A value indicating whether the write operation succeeded.</returns>
        /// <threadsafety instance="true"/>
        public virtual bool WriteToSource(object value)
        {
            bool result = false;

            ItemSource source = Source;

            sourceItemLock.EnterWriteLock();
            providerLock.EnterWriteLock();

            try
            {
                if (source == ItemSource.Item)
                {
                    result = SourceItem.WriteToSource(value);
                }
                else if (source == ItemSource.Provider && Provider is IWriteable)
                {
                    result = ((IWriteable)Provider).Write(this, value);
                }
            }
            finally
            {
                providerLock.ExitWriteLock();
                sourceItemLock.ExitWriteLock();
            }

            if (result)
            {
                ChangeValue(value);
            }

            return(result);
        }