public virtual bool UpdateSource()
 {
     //ignoring the concurrent access, there is no need to use Interlocked or lock
     if (_isSourceUpdating)
     {
         return(false);
     }
     try
     {
         _isSourceUpdating = true;
         if (_sourceAccessor.SetValue(_targetAccessor, this, true))
         {
             RaiseBindingUpdated(BindingEventArgs.SourceTrueArgs);
             return(true);
         }
         RaiseBindingUpdated(BindingEventArgs.SourceFalseArgs);
     }
     catch (Exception exception)
     {
         RaiseBindingException(
             BindingExceptionManager.WrapBindingException(this, BindingAction.UpdateSource, exception),
             exception, BindingAction.UpdateSource);
     }
     finally
     {
         _isSourceUpdating = false;
     }
     return(false);
 }
 /// <summary>
 ///     Sends the current value back to the source.
 /// </summary>
 public virtual bool UpdateSource()
 {
     try
     {
         if (_sourceAccessor.SetValue(_targetAccessor, this, true))
         {
             RaiseBindingUpdated(BindingEventArgs.SourceTrueArgs);
             return(true);
         }
         RaiseBindingUpdated(BindingEventArgs.SourceFalseArgs);
     }
     catch (Exception exception)
     {
         RaiseBindingException(
             BindingExceptionManager.WrapBindingException(this, BindingAction.UpdateSource, exception),
             exception, BindingAction.UpdateSource);
     }
     return(false);
 }