/// <summary> /// Initializes a new instance of the <see cref="AttachedBindingMemberInfo{TTarget,TType}" /> class. /// </summary> public AttachedBindingMemberInfo(string path, Type type, Action <TTarget, MemberAttachedEventArgs> memberAttachedHandler, Func <IBindingMemberInfo, TTarget, IEventListener, IDisposable> observeMemberDelegate, Func <IBindingMemberInfo, TTarget, object[], TType> getValue, Func <IBindingMemberInfo, TTarget, TType> getValueSimple, Func <IBindingMemberInfo, TTarget, object[], object> setValue, Action <IBindingMemberInfo, TTarget, TType> setValueSimple, MemberInfo member, BindingMemberType memberType = null) { Should.NotBeNullOrWhitespace(path, "path"); Should.NotBeNull(type, "type"); if (getValue == null) { _getValueSimple = getValueSimple ?? GetValueThrow <TTarget, TType>; } else { _getValue = getValue; } if (setValue == null) { _setValueSimple = setValueSimple ?? SetValueThrow; } else { _setValue = setValue; } _path = path; _memberAttachedHandler = memberAttachedHandler; _observeMemberDelegate = observeMemberDelegate; _type = type ?? typeof(object); _member = member; _memberType = memberType ?? BindingMemberType.Attached; _canRead = getValue != null || getValueSimple != null; _canWrite = setValue != null || setValueSimple != null; _id = MemberPrefix + Interlocked.Increment(ref _counter).ToString() + "." + path; }
/// <summary> /// Initializes a new instance of the <see cref="BindingMemberInfo" /> class. /// </summary> private BindingMemberInfo(string path, BindingMemberType memberType, Type type) { Should.NotBeNull(path, "path"); Should.NotBeNull(type, "type"); _type = type; _memberType = memberType; _path = path; }
private BindingMemberInfo(string path, BindingMemberType memberType, Type type) { Should.NotBeNull(path, nameof(path)); Should.NotBeNull(type, nameof(type)); _type = type; _memberType = memberType; _path = path; }
public BindingMemberInfo(IBindingMemberInfo attachedIndexerMember, string path) { var accessor = new AttachedIndexerAccessor(attachedIndexerMember, BindingReflectionExtensions.GetIndexerValues(path, castType: typeof(string))); _getValueAccessor = accessor.GetValue; _setValueAccessor = accessor.SetValue; _indexerAttachedBindingMember = attachedIndexerMember; _memberType = attachedIndexerMember.MemberType; _type = attachedIndexerMember.Type; _canRead = attachedIndexerMember.CanRead; _canWrite = attachedIndexerMember.CanWrite; _canObserve = attachedIndexerMember.CanObserve; }
private BindingMemberInfo(string path, BindingMemberType memberType, bool hasSetter = false) : this(path, memberType, typeof(object)) { if (memberType == BindingMemberType.BindingContext) { _canObserve = true; _isDataContext = true; _getValueAccessorSingle = o => { if (o == null) { return(null); } return(BindingServiceProvider.ContextManager.GetBindingContext(o).Value); }; _setValueAccessorSingle = (o, arg) => BindingServiceProvider.ContextManager.GetBindingContext(o).Value = arg; _canRead = true; _canWrite = true; _isSingleParameter = true; } else if (memberType == BindingMemberType.Empty) { if (hasSetter) { _getValueAccessor = (o, objects) => null; _setValueAccessor = (o, objects) => null; } else { _getValueAccessorSingle = o => o; _setValueAccessorSingle = NotSupportedSetter; _isSingleParameter = true; } _canRead = true; _canWrite = _setValueAccessorSingle != null; } else if (memberType == BindingMemberType.Unset) { _getValueAccessorSingle = o => BindingConstants.UnsetValue; _setValueAccessorSingle = NotSupportedSetter; _canRead = true; _canWrite = false; _isSingleParameter = true; } }
public static IAttachedBindingMemberInfo <object, object> CreateMember([NotNull] string path, [NotNull] Type type, [CanBeNull] Func <IBindingMemberInfo, object, object[], object> getValueEx, [CanBeNull] Func <IBindingMemberInfo, object, object[], object> setValue = null, [CanBeNull] Func <IBindingMemberInfo, object, IEventListener, IDisposable> observeMemberDelegate = null, Action <object, MemberAttachedEventArgs> memberAttachedHandler = null, object member = null, BindingMemberType memberType = null) { return(CreateMember(path, getValueEx, setValue, observeMemberDelegate, memberAttachedHandler, member, memberType).UpdateType(type)); }
public static IAttachedBindingMemberInfo <TTarget, TType> CreateMember <TTarget, TType>(BindingMemberDescriptor <TTarget, TType> path, [CanBeNull] Func <IBindingMemberInfo, TTarget, object[], TType> getValueEx, [CanBeNull] Func <IBindingMemberInfo, TTarget, object[], object> setValue = null, [CanBeNull] Func <IBindingMemberInfo, TTarget, IEventListener, IDisposable> observeMemberDelegate = null, Action <TTarget, MemberAttachedEventArgs> memberAttachedHandler = null, object member = null, BindingMemberType memberType = null) where TTarget : class { return(new AttachedBindingMemberInfo <TTarget, TType>(path, typeof(TType), memberAttachedHandler, observeMemberDelegate, getValueEx, null, setValue, null, member, memberType)); }
public AttachedBindingMemberInfo(string path, Type type, Action <TTarget, MemberAttachedEventArgs> memberAttachedHandler, Action <TTarget, AttachedMemberChangedEventArgs <TType> > memberChangedHandler, Func <TTarget, IBindingMemberInfo, TType> getDefaultValue, TType defaultValue, BindingMemberType memberType = null) : this(path, type, memberAttachedHandler, ObserveAttachedDelegate, null, GetAttachedValueDelegate, null, SetAttachedValueDelegate, null, memberType) { _memberChangedHandler = memberChangedHandler; _getDefaultValue = getDefaultValue; _defaultValue = defaultValue; _isAttachedProperty = true; RaiseAction = RaiseAttachedPropertyDelegate; }