protected override object GetRawValueInternal(IBindingMemberInfo targetMember, IDataContext context,
                                                      bool throwOnError)
        {
            IBindingPathMembers members = _bindingSource.GetPathMembers(throwOnError);

            return(members.LastMember.GetValue(members.PenultimateValue, null));
        }
        protected override object GetRawValueInternal(IBindingMemberInfo targetMember, IDataContext context,
                                                      bool throwOnError)
        {
            IBindingPathMembers members = _bindingSource.GetPathMembers(throwOnError);
            var value = members.GetLastMemberValue();

            if (members.Path.IsDebuggable)
            {
                DebugInfo($"Binding got a raw value: '{value}', for path: '{members.Path}'", new[] { value, members });
            }
            return(value);
        }
        private void TrySubscribe(IObserver source)
        {
            var pathMembers = source.GetPathMembers(false);

            if (IsDirectSource)
            {
                if (!pathMembers.AllMembersAvailable)
                {
                    return;
                }
                var value = pathMembers.GetLastMemberValue();
                if (!ReferenceEquals(value, BindingConstants.ErrorsSourceValue))
                {
                    return;
                }
            }

            var dataErrorInfo = pathMembers.PenultimateValue as INotifyDataErrorInfo;

            if (dataErrorInfo == null)
            {
                return;
            }
            var subscriber = BindingServiceProvider.WeakEventManager.TrySubscribe(dataErrorInfo, ErrorsChangedEvent, this);

            if (subscriber != null)
            {
                _subscribers.Add(subscriber);
            }
        }
 private void SetDefaultValue(IObserver source)
 {
     var pathMembers = source.GetPathMembers(false);
     if (pathMembers.AllMembersAvailable)
     {
         object value = _value;
         if (!pathMembers.LastMember.Type.IsInstanceOfType(value))
             value = pathMembers.LastMember.Type.GetDefaultValue();
         pathMembers.LastMember.SetValue(pathMembers.PenultimateValue, new[] { value });
     }
 }
Esempio n. 5
0
        private static bool IsAllMembersAvailable(this IObserver observer, bool checkLastMember)
        {
            var pathMembers = observer.GetPathMembers(false);

            if (!pathMembers.AllMembersAvailable)
            {
                return(false);
            }
            if (checkLastMember && pathMembers.LastMember.CanRead)
            {
                return(!pathMembers.LastMember.GetValue(pathMembers.PenultimateValue, Empty.Array <object>()).IsUnsetValue());
            }
            return(true);
        }
Esempio n. 6
0
        private void SetDefaultValue(IObserver source)
        {
            var pathMembers = source.GetPathMembers(false);

            if (pathMembers.AllMembersAvailable)
            {
                object value = _value;
                if (!pathMembers.LastMember.Type.IsInstanceOfType(value))
                {
                    value = pathMembers.LastMember.Type.GetDefaultValue();
                }
                pathMembers.LastMember.SetSingleValue(pathMembers.PenultimateValue, value);
            }
        }
Esempio n. 7
0
        private void TrySubscribe(IObserver source)
        {
            var dataErrorInfo = source.GetPathMembers(false).PenultimateValue as INotifyDataErrorInfo;

            if (dataErrorInfo == null)
            {
                return;
            }
            var subscriber = BindingServiceProvider.WeakEventManager.TrySubscribe(dataErrorInfo, ErrorsChangedEvent, this);

            if (subscriber != null)
            {
                _subscribers.Add(subscriber);
            }
        }
Esempio n. 8
0
        internal static object GetCurrentValue(this IObserver source)
        {
            IBindingPathMembers pathMembers = source.GetPathMembers(true);
            object value = pathMembers.LastMember.GetValue(pathMembers.PenultimateValue, null);

            if (value.IsUnsetValue())
            {
                return(null);
            }
            var actionValue = value as BindingActionValue;

            if (actionValue == null)
            {
                return(value);
            }
            return(actionValue.GetValue(null));
        }
        private void CollectErrors(ref List <object> errors, IObserver bindingSource)
        {
            var pathMembers = bindingSource.GetPathMembers(false);

            if (IsDirectSource)
            {
                if (!pathMembers.AllMembersAvailable)
                {
                    return;
                }
                var value = pathMembers.GetLastMemberValue();
                if (!ReferenceEquals(value, BindingConstants.ErrorsSourceValue))
                {
                    return;
                }
            }

            var notifyDataErrorInfo = pathMembers.PenultimateValue as INotifyDataErrorInfo;

            if (notifyDataErrorInfo == null)
            {
                return;
            }
            var path = bindingSource.Path.Parts.LastOrDefault();

            if (!IsDirectSource)
            {
                CollectErrors(notifyDataErrorInfo, path, ref errors);
            }

            var paths = ErrorPaths;

            if (paths == null || paths.Length == 0)
            {
                if (IsDirectSource)
                {
                    CollectErrors(notifyDataErrorInfo, string.Empty, ref errors);
                }
                return;
            }
            for (int i = 0; i < paths.Length; i++)
            {
                CollectErrors(notifyDataErrorInfo, paths[i], ref errors);
            }
        }
Esempio n. 10
0
        private void CollectErrors(ref List <object> errors, IObserver bindingSource)
        {
            var notifyDataErrorInfo = bindingSource.GetPathMembers(false).PenultimateValue as INotifyDataErrorInfo;

            if (notifyDataErrorInfo == null)
            {
                return;
            }
            var path  = bindingSource.Path.Parts.LastOrDefault();
            var paths = ErrorPaths;

            if (!string.IsNullOrEmpty(path) || paths == null || paths.Length == 0)
            {
                CollectErrors(notifyDataErrorInfo, path, ref errors);
            }
            if (paths != null)
            {
                for (int i = 0; i < paths.Length; i++)
                {
                    CollectErrors(notifyDataErrorInfo, paths[i], ref errors);
                }
            }
        }
Esempio n. 11
0
 /// <summary>
 ///     Gets the source object include the path members.
 /// </summary>
 /// <param name="throwOnError">
 ///     true to throw an exception if the source is not valid.
 /// </param>
 public IBindingPathMembers GetPathMembers(bool throwOnError)
 {
     return(_observer.GetPathMembers(throwOnError));
 }
 private void CollectErrors(ref List<object> errors, IObserver bindingSource)
 {
     var notifyDataErrorInfo = bindingSource.GetPathMembers(false).PenultimateValue as INotifyDataErrorInfo;
     if (notifyDataErrorInfo == null)
         return;
     var path = bindingSource.Path.Parts.LastOrDefault();
     var paths = ErrorPaths;
     if (!string.IsNullOrEmpty(path) || paths == null || paths.Length == 0)
         CollectErrors(notifyDataErrorInfo, path, ref errors);
     if (paths != null)
     {
         for (int i = 0; i < paths.Length; i++)
             CollectErrors(notifyDataErrorInfo, paths[i], ref errors);
     }
 }
 private void TrySubscribe(IObserver source)
 {
     var dataErrorInfo = source.GetPathMembers(false).PenultimateValue as INotifyDataErrorInfo;
     if (dataErrorInfo == null)
         return;
     var subscriber = BindingServiceProvider.WeakEventManager.TrySubscribe(dataErrorInfo, ErrorsChangedEvent, this);
     if (subscriber != null)
         _subscribers.Add(subscriber);
 }