/// <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;
 }
예제 #2
0
 /// <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;
 }
예제 #3
0
 private BindingMemberInfo(string path, BindingMemberType memberType, Type type)
 {
     Should.NotBeNull(path, nameof(path));
     Should.NotBeNull(type, nameof(type));
     _type       = type;
     _memberType = memberType;
     _path       = path;
 }
예제 #4
0
        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;
        }
예제 #5
0
 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;
 }