public void SetValue(BindingActionValue currentValue, object newValue, IBindingPathMembers pathMembers)
 {
     _path = pathMembers.Path;
     //it's normal here.
     lock (this)
     {
         if (_currentValue != null && Equals(currentValue.Member, _currentValue.Member) &&
             Equals(_currentValue.MemberSource.Target, currentValue.MemberSource.Target))
         {
             SetValue(newValue, pathMembers);
         }
         else
         {
             UnsubscribeEventHandler();
             currentValue.TrySetValue(new object[] { this }, out _subscriber);
             if (_subscriber != null)
             {
                 if (_path.IsDebuggable)
                 {
                     DebugInfo($"Binding subscribed to event: '{pathMembers.LastMember.Path}'", new object[] { pathMembers });
                 }
                 _currentValue = currentValue;
                 SetValue(newValue, pathMembers);
             }
         }
     }
 }
 public void SetValue(BindingActionValue currentValue, object newValue)
 {
     //it's normal here.
     lock (this)
     {
         if (_currentValue != null && Equals(currentValue.Member, _currentValue.Member) &&
             Equals(_currentValue.MemberSource.Target, currentValue.MemberSource.Target))
         {
             SetValue(newValue);
         }
         else
         {
             UnsubscribeEventHandler();
             currentValue.TrySetValue(new object[] { this }, out _subscriber);
             if (_subscriber != null)
             {
                 _currentValue = currentValue;
                 SetValue(newValue);
             }
         }
     }
 }