/// <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); }