Example #1
0
 static BindingPath()
 {
     Cache = new Dictionary<string, IBindingPath>();
     None = Create("##none##", false);
     Empty = Create(string.Empty, false);
     DataContext = Create(AttachedMemberConstants.DataContext);
 }
 public BindingPathMembersMock(object source, IBindingPath path)
 {
     Path = path;
     AllMembersAvailable = source != null;
     Source = source;
     PenultimateValue = source;
     _members = Empty.Array<IBindingMemberInfo>();
     LastMember = BindingMemberInfo.Empty;
 }
Example #3
0
        private IExpressionNode GetResourceMember(IExpressionNode node, string memberName, IList <IExpressionNode> nodes)
        {
            IExpressionNode staticValue;

            if (_staticNodes.TryGetValue(node, out staticValue))
            {
                return(staticValue);
            }

            IBindingPath path        = BindingPath.Create(memberName);
            string       firstMember = path.Parts[0];
            Type         type        = BindingServiceProvider.ResourceResolver.ResolveType(firstMember, DataContext.Empty, false);
            var          dynMember   = (ResourceExpressionNode)nodes[0];

            if (dynMember.Dynamic && type == null)
            {
                memberName = BindingExtensions.MergePath(path.Parts.Skip(1).ToArray());
                return(GetOrAddBindingMember("$" + path.Path, (s, i) => new BindingMemberExpressionNode(firstMember, memberName, s, i)));
            }

            bool            dynamicMember   = false;
            IExpressionNode firstMemberNode = nodes[1];

            if (!_staticNodes.TryGetValue(firstMemberNode, out staticValue))
            {
                if (type == null)
                {
                    IBindingResourceObject resourceObject = BindingServiceProvider
                                                            .ResourceResolver
                                                            .ResolveObject(firstMember, DataContext.Empty, true);
                    var dynamicObject = resourceObject.Value as IDynamicObject;
                    if (dynamicObject == null || path.Parts.Count <= 1)
                    {
                        staticValue = new ConstantExpressionNode(resourceObject.Value, resourceObject.Type);
                    }
                    else
                    {
                        staticValue   = new ConstantExpressionNode(dynamicObject.GetMember(path.Parts[1], Empty.Array <object>()));
                        dynamicMember = true;
                    }
                }
                else
                {
                    staticValue = new ConstantExpressionNode(type, typeof(Type));
                }
                _staticNodes[firstMemberNode] = staticValue;
                if (dynamicMember)
                {
                    _staticNodes[nodes[2]] = staticValue;
                }
            }
            if (firstMemberNode == node || (dynamicMember && node == nodes[2]))
            {
                return(staticValue);
            }
            return(node);
        }
        public void BindingPathShouldParseMultiPropertyWithIndexer()
        {
            var          strings     = new[] { "[test]", "Test1", "Test2[test]", "Test3" };
            var          items       = new[] { "[test]", "Test1", "Test2", "[test]", "Test3" };
            string       path        = string.Join(".", strings);
            IBindingPath bindingPath = GetBindingPath(path);

            bindingPath.Parts.SequenceEqual(items).ShouldBeTrue();
            bindingPath.Path.ShouldEqual(path);
        }
 public SinglePathObserver([NotNull] object source, [NotNull] IBindingPath path, bool ignoreAttachedMembers, bool hasStablePath, bool observable, bool optional)
     : base(source, path)
 {
     Should.BeSupported(path.IsSingle, "The SinglePathObserver supports only single path members.");
     _ignoreAttachedMembers = ignoreAttachedMembers;
     _ref           = ToolkitServiceProvider.WeakReferenceFactory(this);
     _hasStablePath = hasStablePath;
     _observable    = observable;
     _optional      = optional;
 }
 /// <summary>
 ///     Attempts to track the value change using the binding path.
 /// </summary>
 public virtual IObserver Observe(object target, IBindingPath path, bool ignoreAttachedMembers)
 {
     Should.NotBeNull(target, "target");
     Should.NotBeNull(path, "path");
     if (path.IsSingle)
         return new SinglePathObserver(target, path, ignoreAttachedMembers);
     if (path.IsEmpty)
         return new EmptyPathObserver(target, path);
     return new MultiPathObserver(target, path, ignoreAttachedMembers);
 }
Example #7
0
 public MultiPathObserver([NotNull] object source, [NotNull] IBindingPath path, bool ignoreAttachedMembers, bool hasStablePath, bool observable, bool optional)
     : base(source, path)
 {
     Should.BeSupported(!path.IsEmpty, "The MultiPathObserver doesn't support the empty path members.");
     _listeners             = new List <IDisposable>(path.Parts.Count - 1);
     _ignoreAttachedMembers = ignoreAttachedMembers;
     _lastMemberListener    = new LastMemberListener(ServiceProvider.WeakReferenceFactory(this));
     _hasStablePath         = hasStablePath;
     _observable            = observable;
     _optional = optional;
 }
 /// <summary>
 ///     Initializes a new instance of the <see cref="MultiPathObserver" /> class.
 /// </summary>
 public MultiPathObserver([NotNull] object source, [NotNull] IBindingPath path, bool ignoreAttachedMembers)
     : base(source, path)
 {
     Should.BeSupported(!path.IsEmpty, "The MultiPathObserver doesn't support the empty path members.");
     _listeners             = new List <IDisposable>(path.Parts.Count - 1);
     _ignoreAttachedMembers = ignoreAttachedMembers;
     _members            = UnsetBindingPathMembers.Instance;
     _selfReference      = ServiceProvider.WeakReferenceFactory(this, true);
     _lastMemberListener = new LastMemberListener(_selfReference);
     Update();
 }
 public BindingPathMembersMock(object source, IBindingPath path, object penultimateValue,
     IList<IBindingMemberInfo> members, bool allMembersAvailable)
 {
     Path = path;
     Source = source;
     PenultimateValue = penultimateValue;
     AllMembersAvailable = allMembersAvailable && penultimateValue != null;
     _members = members ?? Empty.Array<IBindingMemberInfo>();
     if (allMembersAvailable && _members.Count != 0)
         LastMember = _members[_members.Count - 1];
     else
         LastMember = BindingMemberInfo.Unset;
 }
 /// <summary>
 ///     Attempts to track the value change using the binding path.
 /// </summary>
 public virtual IObserver Observe(object target, IBindingPath path, bool ignoreAttachedMembers)
 {
     Should.NotBeNull(target, "target");
     Should.NotBeNull(path, "path");
     if (path.IsSingle)
     {
         return(new SinglePathObserver(target, path, ignoreAttachedMembers));
     }
     if (path.IsEmpty)
     {
         return(new EmptyPathObserver(target, path));
     }
     return(new MultiPathObserver(target, path, ignoreAttachedMembers));
 }
Example #11
0
 protected ObserverBase([NotNull] object source, [NotNull] IBindingPath path)
 {
     Should.NotBeNull(source, "source");
     Should.NotBeNull(path, "path");
     _path = path;
     if (source is ISourceValue)
     {
         _source = source;
     }
     else
     {
         _source = ServiceProvider.WeakReferenceFactory(source);
     }
 }
 public BindingPathMembersMock(object source, IBindingPath path, IBindingMemberInfo member)
 {
     Source = source;
     PenultimateValue = source;
     Path = path;
     if (member == null || source == null)
     {
         AllMembersAvailable = false;
         LastMember = BindingMemberInfo.Unset;
         _members = Empty.Array<IBindingMemberInfo>();
     }
     else
     {
         AllMembersAvailable = true;
         LastMember = member;
     }
 }
Example #13
0
        public virtual void BindingShouldBeRegisteredInBindingManager()
        {
            var          target         = new object();
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            DataBinding  binding        = CreateDataBinding(
                new BindingSourceAccessorMock {
                Source = new ObserverMock {
                    GetActualSource = b => target, Path = path
                }
            },
                new BindingSourceAccessorMock(), bindingManager);

            bindingManager.Register(target, path.Path, binding);
            bindingManager.GetBindings(target).Single().ShouldEqual(binding);
            bindingManager.GetBindings(target, path.Path).Single().ShouldEqual(binding);
        }
 /// <summary>
 ///     Initializes a new instance of the <see cref="BindingPathMembersMock" /> class.
 /// </summary>
 public BindingPathMembersMock(object source, IBindingPath path, IBindingMemberInfo member)
 {
     Source           = source;
     PenultimateValue = source;
     Path             = path;
     if (member == null || source == null)
     {
         AllMembersAvailable = false;
         LastMember          = BindingMemberInfo.Unset;
         _members            = Empty.Array <IBindingMemberInfo>();
     }
     else
     {
         AllMembersAvailable = true;
         LastMember          = member;
     }
 }
 /// <summary>
 ///     Initializes a new instance of the <see cref="BindingPathMembersMock" /> class.
 /// </summary>
 public BindingPathMembersMock(object source, IBindingPath path, object penultimateValue,
                               IList <IBindingMemberInfo> members, bool allMembersAvailable)
 {
     Path                = path;
     Source              = source;
     PenultimateValue    = penultimateValue;
     AllMembersAvailable = allMembersAvailable && penultimateValue != null;
     _members            = members ?? Empty.Array <IBindingMemberInfo>();
     if (allMembersAvailable && _members.Count != 0)
     {
         LastMember = _members[_members.Count - 1];
     }
     else
     {
         LastMember = BindingMemberInfo.Unset;
     }
 }
Example #16
0
        public virtual void BindingShouldCorrectInitializeProperties()
        {
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new ObserverMock {
                    GetActualSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            binding.TargetAccessor.ShouldEqual(target);
            binding.SourceAccessor.ShouldEqual(source);
            binding.Behaviors.ShouldBeEmpty();
        }
Example #17
0
        public static object GetValueFromPath(object src, string strPath, int firstMemberIndex = 0)
        {
            IBindingPath path = BindingServiceProvider.BindingPathFactory(strPath);

            for (int index = firstMemberIndex; index < path.Parts.Count; index++)
            {
                string item = path.Parts[index];
                if (src.IsNullOrUnsetValue())
                {
                    return(null);
                }
                IBindingMemberInfo member = BindingServiceProvider
                                            .MemberProvider
                                            .GetBindingMember(src.GetType(), item, false, true);
                src = member.GetValue(src, null);
            }
            return(src);
        }
Example #18
0
        public virtual void BindingShouldAddSelfToDataContext()
        {
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new ObserverMock {
                    GetActualSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            var dataContext = binding.Context;

            dataContext.Count.ShouldEqual(1);
            dataContext.GetData(BindingConstants.Binding).ShouldEqual(binding);
        }
Example #19
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="ObserverBase" /> class.
        /// </summary>
        protected ObserverBase([NotNull] object source, [NotNull] IBindingPath path)
        {
            Should.NotBeNull(source, "source");
            Should.NotBeNull(path, "path");
            _path = path;
            var sourceValue = source as ISourceValue;

            if (sourceValue == null)
            {
                _sourceValue = ServiceProvider.WeakReferenceFactory(source, true);
            }
            else
            {
                _isSourceValue            = true;
                _sourceValue              = sourceValue;
                sourceValue.ValueChanged += OnMemberChangedImpl;
            }
        }
        public virtual IObserver Observe(object target, IBindingPath path, bool ignoreAttachedMembers, IDataContext context)
        {
            Should.NotBeNull(target, nameof(target));
            Should.NotBeNull(path, nameof(path));
            if (path.IsEmpty)
                return new EmptyPathObserver(target, path);

            bool hasStablePath;
            bool observable;
            bool optional;
            if (context == null || !context.TryGetData(BindingBuilderConstants.HasStablePath, out hasStablePath))
                hasStablePath = BindingServiceProvider.HasStablePathDefault;
            if (context == null || !context.TryGetData(BindingBuilderConstants.Observable, out observable))
                observable = BindingServiceProvider.ObservablePathDefault;
            if (context == null || !context.TryGetData(BindingBuilderConstants.Optional, out optional))
                optional = BindingServiceProvider.OptionalBindingDefault;
            if (path.IsSingle)
                return new SinglePathObserver(target, path, ignoreAttachedMembers, hasStablePath, observable, optional);
            return new MultiPathObserver(target, path, ignoreAttachedMembers, hasStablePath, observable, optional);
        }
Example #21
0
        public virtual IObserver Observe(object target, IBindingPath path, bool ignoreAttachedMembers, IDataContext context)
        {
            Should.NotBeNull(target, nameof(target));
            Should.NotBeNull(path, nameof(path));

            string tag;

            if (context != null && context.TryGetData(BindingBuilderConstants.DebugTag, out tag))
            {
                path = new DebuggableBindingPathWrapper(path, tag);
            }

            if (path.IsEmpty)
            {
                return(new EmptyPathObserver(target, path));
            }

            bool hasStablePath;
            bool observable;
            bool optional;

            if (context == null || !context.TryGetData(BindingBuilderConstants.HasStablePath, out hasStablePath))
            {
                hasStablePath = BindingServiceProvider.HasStablePathDefault;
            }
            if (context == null || !context.TryGetData(BindingBuilderConstants.Observable, out observable))
            {
                observable = BindingServiceProvider.ObservablePathDefault;
            }
            if (context == null || !context.TryGetData(BindingBuilderConstants.Optional, out optional))
            {
                optional = BindingServiceProvider.OptionalBindingDefault;
            }
            if (path.IsSingle)
            {
                return(new SinglePathObserver(target, path, ignoreAttachedMembers, hasStablePath, observable, optional));
            }
            return(new MultiPathObserver(target, path, ignoreAttachedMembers, hasStablePath, observable, optional));
        }
Example #22
0
        public virtual void BindingShouldNotAddSameBehavior()
        {
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new ObserverMock {
                    GetActualSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            var first = new BindingBehaviorMock
            {
                Id     = Guid.Empty,
                Attach = binding1 => true
            };

            binding.Behaviors.Add(first);
            ShouldThrow(() => binding.Behaviors.Add(first));
        }
        public virtual void BindingShouldThrowExceptionDuplicateIdBehavior()
        {
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new BindingSourceMock {
                    GetSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            var first = new BindingBehaviorMock {
                Id = Guid.Empty, Attach = binding1 => true
            };
            var second = new BindingBehaviorMock {
                Id = Guid.Empty, Attach = binding1 => true
            };

            binding.Behaviors.Add(first);
            ShouldThrow(() => binding.Behaviors.Add(second));
        }
Example #24
0
        public virtual void BindingShouldNotAddBehaviorIfAttachReturnsFalse()
        {
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new ObserverMock {
                    GetActualSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            var first = new BindingBehaviorMock
            {
                Id     = Guid.Empty,
                Attach = binding1 => false
            };

            binding.Behaviors.Add(first);
            binding.Behaviors.Count.ShouldEqual(0);
            binding.Behaviors.Contains(first).ShouldBeFalse();
        }
Example #25
0
        private IExpressionNode VisitExpression(IExpressionNode node)
        {
            if (_nodes == null)
            {
                _nodes = new List <IExpressionNode>();
            }
            else
            {
                _nodes.Clear();
            }

            string memberName = node.TryGetMemberName(true, true, _nodes);

            if (memberName == null)
            {
                _isMulti = true;
                return(node);
            }
            if (_nodes[0] is ResourceExpressionNode)
            {
                return(GetResourceMember(node, memberName, _nodes));
            }

            IBindingPath path = BindingServiceProvider.BindingPathFactory(memberName);

            if (path.IsEmpty)
            {
                return(GetOrAddBindingMember(memberName, (s, i) => new BindingMemberExpressionNode(memberName, s, i)));
            }
            string firstMember = path.Parts[0];

            if (_lamdaParameters.Contains(firstMember))
            {
                return(node);
            }
            return(GetOrAddBindingMember(memberName, (s, i) => new BindingMemberExpressionNode(memberName, s, i)));
        }
Example #26
0
        public virtual void BindingShouldRaiseEventWhenUpdateTargetFalse()
        {
            bool         isInvoked      = false;
            IBindingPath path           = BindingPath.Create("test");
            var          bindingManager = new BindingManager();
            var          target         = new BindingSourceAccessorMock
            {
                Source = new ObserverMock {
                    GetActualSource = b => new object(), Path = path
                }
            };
            var         source  = new BindingSourceAccessorMock();
            DataBinding binding = CreateDataBinding(target, source, bindingManager);

            target.SetValue         = (func, context, arg3) => false;
            binding.BindingUpdated += (sender, args) =>
            {
                args.Action.ShouldEqual(BindingAction.UpdateTarget);
                args.Result.ShouldBeFalse();
                isInvoked = true;
            };
            binding.UpdateTarget();
            isInvoked.ShouldBeTrue();
        }
 private static IObserver BindSource(IDataContext context, IBindingPath path)
 {
     object src = context.GetData(BindingBuilderConstants.Source) ??
                  BindingServiceProvider.ContextManager.GetBindingContext(
                      context.GetData(BindingBuilderConstants.Target, true),
                      context.GetData(BindingBuilderConstants.TargetPath, true).Path);
     return BindingServiceProvider.ObserverProvider.Observe(src, path, false, context);
 }
 protected virtual IDataBinding CreateBinding([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
 {
     IBindingSourceAccessor sourceAccessor;
     var formatExpression = context.GetData(BindingBuilderConstants.MultiExpression);
     var sourceDelegates = context.GetData(BindingBuilderConstants.Sources, true);
     if (sourceDelegates.Count > 1 || formatExpression != null)
     {
         formatExpression = formatExpression ?? FormatMembersExpressionDelegate;
         var sources = new IObserver[sourceDelegates.Count];
         for (int index = 0; index < sourceDelegates.Count; index++)
             sources[index] = sourceDelegates[index].Invoke(context);
         sourceAccessor = new MultiBindingSourceAccessor(sources, formatExpression, context);
     }
     else
         sourceAccessor = new BindingSourceAccessor(sourceDelegates[0].Invoke(context), context, false);
     var binding = new DataBinding(new BindingSourceAccessor(GetBindingTarget(context, out target, out targetPath), context, true), sourceAccessor);
     object source;
     if (context.TryGetData(BindingBuilderConstants.Source, out source))
         binding.Context.AddOrUpdate(BindingConstants.Source, ToolkitExtensions.GetWeakReference(source));
     AddBehaviors(binding, context);
     return binding;
 }
 protected virtual IObserver GetBindingTarget([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
 {
     target = context.GetData(BindingBuilderConstants.Target, true);
     targetPath = context.GetData(BindingBuilderConstants.TargetPath, true);
     var src = context.GetData(BindingBuilderConstants.TargetSource);
     return BindingServiceProvider.ObserverProvider.Observe(src ?? target, targetPath, false);
 }
Example #30
0
 static BindingPath()
 {
     None        = new BindingPath("##none##");
     Empty       = new BindingPath(string.Empty);
     DataContext = new BindingPath(AttachedMemberConstants.DataContext);
 }
Example #31
0
 public EmptyPathObserver([NotNull] object source, [NotNull] IBindingPath path)
     : base(source, path)
 {
     Should.BeSupported(path.IsEmpty, "The EmptyPathObserver supports only empty path members.");
     _members = new EmptyBindingPathMembers(ServiceProvider.WeakReferenceFactory(this));
 }
Example #32
0
        protected virtual IDataBinding CreateBinding([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
        {
            IBindingSourceAccessor sourceAccessor;
            var formatExpression = context.GetData(BindingBuilderConstants.MultiExpression);
            var sourceDelegates  = context.GetData(BindingBuilderConstants.Sources, true);

            if (sourceDelegates.Count > 1 || formatExpression != null)
            {
                formatExpression = formatExpression ?? FormatMembersExpressionDelegate;
                var sources = new IBindingSource[sourceDelegates.Count];
                for (int index = 0; index < sourceDelegates.Count; index++)
                {
                    sources[index] = Decorate(sourceDelegates[index].Invoke(context), false, context);
                }
                sourceAccessor = new MultiBindingSourceAccessor(sources, formatExpression, context);
            }
            else
            {
                sourceAccessor = new BindingSourceAccessor(Decorate(sourceDelegates[0].Invoke(context), false, context), context, false);
            }
            var binding = new DataBinding(new BindingSourceAccessor(GetBindingTarget(context, out target, out targetPath), context, true), sourceAccessor);

            AddBehaviors(binding, context);
            return(binding);
        }
Example #33
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="EmptyPathObserver" /> class.
 /// </summary>
 public EmptyPathObserver([NotNull] object source, [NotNull] IBindingPath path)
     : base(source, path)
 {
     Should.BeSupported(path.IsEmpty, "The EmptyPathObserver supports only empty path members.");
     _members = new EmptyBindingPathMembers(this);
 }
Example #34
0
        protected virtual IObserver GetBindingTarget([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
        {
            target     = context.GetData(BindingBuilderConstants.Target, true);
            targetPath = context.GetData(BindingBuilderConstants.TargetPath, true);
            var src = context.GetData(BindingBuilderConstants.TargetSource);

            return(BindingServiceProvider.ObserverProvider.Observe(src ?? target, targetPath, false, context));
        }
Example #35
0
        protected virtual IDataBinding CreateBinding([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
        {
            IBindingSourceAccessor sourceAccessor;
            var formatExpression = context.GetData(BindingBuilderConstants.MultiExpression);
            var sourceDelegates  = context.GetData(BindingBuilderConstants.Sources, true);

            if (sourceDelegates.Count > 1 || formatExpression != null)
            {
                formatExpression = formatExpression ?? FormatMembersExpressionDelegate;
                var sources = new IObserver[sourceDelegates.Count];
                for (int index = 0; index < sourceDelegates.Count; index++)
                {
                    sources[index] = sourceDelegates[index].Invoke(context);
                }
                sourceAccessor = new MultiBindingSourceAccessor(sources, formatExpression, context);
            }
            else
            {
                sourceAccessor = new BindingSourceAccessor(sourceDelegates[0].Invoke(context), context, false);
            }
            var    binding = new DataBinding(new BindingSourceAccessor(GetBindingTarget(context, out target, out targetPath), context, true), sourceAccessor);
            object source;

            if (context.TryGetData(BindingBuilderConstants.Source, out source))
            {
                binding.Context.AddOrUpdate(BindingConstants.Source, ToolkitExtensions.GetWeakReference(source));
            }
            AddBehaviors(binding, context);
            return(binding);
        }
 /// <summary>
 ///     Attempts to track the value change using the binding path.
 /// </summary>
 IObserver IObserverProvider.Observe(object target, IBindingPath path, bool ignoreAttachedMembers)
 {
     return(Observe(target, path, ignoreAttachedMembers));
 }
 static BindingPath()
 {
     None = new BindingPath("##none##");
     Empty = new BindingPath(string.Empty);
     DataContext = new BindingPath(AttachedMemberConstants.DataContext);
 }
 public MultiBindingPathMembers(WeakReference observerReference, object penultimateValue, IBindingPath path,
     IList<IBindingMemberInfo> members)
 {
     _observerRef = observerReference;
     _penultimateValueRef = ToolkitExtensions.GetWeakReference(penultimateValue);
     _path = path;
     _members = members;
     _lastMember = _members[_members.Count - 1];
 }
 public SingleBindingPathMembers(WeakReference source, IBindingPath path, IBindingMemberInfo lastMember)
 {
     _reference = source;
     _lastMember = lastMember;
     _path = path;
 }
 IObserver IObserverProvider.Observe(object target, IBindingPath path, bool ignoreAttachedMembers, IDataContext context)
 {
     if (ObserveWithContext == null)
         return Observe(target, path, ignoreAttachedMembers);
     return ObserveWithContext(target, path, ignoreAttachedMembers, context);
 }
Example #41
0
        protected virtual IBindingSource GetBindingTarget([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
        {
            target     = context.GetData(BindingBuilderConstants.Target, true);
            targetPath = context.GetData(BindingBuilderConstants.TargetPath, true);
            IBindingSource bindingSource = new BindingTarget(BindingServiceProvider.ObserverProvider.Observe(target, targetPath, false))
            {
                CommandParameterDelegate = context.GetData(BindingBuilderConstants.CommandParameter)
            };

            if (_decorators.Count != 0)
            {
                return(Decorate(bindingSource, true, context));
            }
            return(bindingSource);
        }
 public SingleBindingPathMembers(WeakReference source, IBindingPath path, IBindingMemberInfo lastMember)
 {
     Reference   = source;
     _lastMember = lastMember;
     _path       = path;
 }
Example #43
0
 public DebuggableBindingPathWrapper(IBindingPath path, string tag)
 {
     _path    = path;
     DebugTag = tag;
 }
 /// <summary>
 ///     Attempts to track the value change using the binding path.
 /// </summary>
 IObserver IObserverProvider.Observe(object target, IBindingPath path, bool ignoreAttachedMembers)
 {
     return Observe(target, path, ignoreAttachedMembers);
 }
 protected virtual IBindingSource GetBindingTarget([NotNull] IDataContext context, out object target, out IBindingPath targetPath)
 {
     target = context.GetData(BindingBuilderConstants.Target, true);
     targetPath = context.GetData(BindingBuilderConstants.TargetPath, true);
     var src = context.GetData(BindingBuilderConstants.TargetSource);
     IBindingSource bindingSource = new BindingTarget(BindingServiceProvider.ObserverProvider.Observe(src ?? target, targetPath, false))
     {
         CommandParameterDelegate = context.GetData(BindingBuilderConstants.CommandParameter)
     };
     if (_decorators.Count != 0)
         return Decorate(bindingSource, true, context);
     return bindingSource;
 }