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