Ejemplo n.º 1
0
        /// <summary>
        ///     Tries to set value.
        /// </summary>
        public static bool TrySetValue <TResult>([CanBeNull] this BindingMemberValue memberValue, object[] args, out TResult result)
        {
            result = default(TResult);
            if (memberValue == null)
            {
                return(false);
            }
            object source = memberValue.MemberSource.Target;

            if (memberValue.MemberSource.Target == null)
            {
                return(false);
            }
            try
            {
                var value = memberValue.Member.SetValue(source, args);
                if (value is TResult)
                {
                    result = (TResult)value;
                }
            }
            catch (Exception exception)
            {
                Tracer.Error(exception.Flatten(false));
                return(false);
            }
            return(true);
        }
Ejemplo n.º 2
0
 private void TryRegisterEvent(BindingMemberValue bindingMemberValue, object newValue, IDataContext context)
 {
     if (newValue == null && _closure == null)
     {
         return;
     }
     if (_closure == null)
     {
         Interlocked.CompareExchange(ref _closure, new EventClosure(ServiceProvider.WeakReferenceFactory(this, true), _toggleEnabledState), null);
     }
     _closure.LastContext = context;
     _closure.SetValue(bindingMemberValue, newValue);
 }
 /// <summary>
 ///     Gets the source value.
 /// </summary>
 protected override object GetValueInternal(IBindingMemberInfo targetMember, IDataContext context,
                                            bool throwOnError)
 {
     if (targetMember.MemberType == BindingMemberType.Event)
     {
         if (_getSourceMemberValue == null)
         {
             _getSourceMemberValue = new BindingMemberValue(this, BindingMemberInfo.MultiBindingSourceAccessorMember);
         }
         _lastContext = context;
         return(_getSourceMemberValue);
     }
     return(base.GetValueInternal(targetMember, context, throwOnError));
 }
Ejemplo n.º 4
0
 public void SetValue(BindingMemberValue 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);
             }
         }
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        ///     Gets the value of binding member.
        /// </summary>
        public static object GetValue([CanBeNull] this BindingMemberValue memberValue, object[] args)
        {
            if (memberValue == null)
            {
                return(BindingConstants.UnsetValue);
            }
            object source = memberValue.MemberSource.Target;

            if (source == null)
            {
                return(BindingConstants.UnsetValue);
            }
            try
            {
                return(memberValue.Member.GetValue(source, args));
            }
            catch (Exception exception)
            {
                Tracer.Error(exception.Flatten(false));
                return(BindingConstants.UnsetValue);
            }
        }