Beispiel #1
0
        private void UnionRelatedProperties(LambdaExpression[] baseRelatedProperties)
        {
            var relatedProperties = new HashSet <string>();

            if (baseRelatedProperties != null)
            {
                foreach (var expression in baseRelatedProperties)
                {
                    var propertyName = ReactiveValidationHelper.GetPropertyName(typeof(TObject), expression);
                    if (string.IsNullOrEmpty(propertyName) == false)
                    {
                        relatedProperties.Add(propertyName);
                    }
                }
            }

            foreach (var innerValidator in _innerValidators)
            {
                foreach (var innerValidatorRelatedProperty in innerValidator.RelatedProperties)
                {
                    relatedProperties.Add(innerValidatorRelatedProperty);
                }
            }

            RelatedProperties = relatedProperties;
        }
        private void AddRelatedProperties(LambdaExpression[] relatedProperties)
        {
            if (relatedProperties?.Any() != true)
            {
                return;
            }

            foreach (var expression in relatedProperties)
            {
                var propertyName = ReactiveValidationHelper.GetPropertyName(typeof(TObject), expression);
                if (string.IsNullOrEmpty(propertyName) == false)
                {
                    _relatedProperties.Add(propertyName);
                }
            }
        }
Beispiel #3
0
        private IEnumerable <Func <TObject, TCollection, Action, IDisposable> > GetObserverBuilders()
        {
            var observerBuilders = new List <Func <TObject, TCollection, Action, IDisposable> >();

            var propType = ReactiveValidationHelper.GetPropertyType(typeof(TObject), PropertyName);

            if (typeof(INotifyPropertyChanged).IsAssignableFrom(propType) == true)
            {
                observerBuilders.Add((o, collection, action) => new NotifyCollectionChangedSubsriber((INotifyCollectionChanged)collection, action));
            }

            foreach (var propertyObservable in ValidationOptions.CollectionObservers)
            {
                if (propertyObservable.CanObserve(typeof(TObject), propType))
                {
                    observerBuilders.Add(propertyObservable.CreateObserver);
                }
            }

            return(observerBuilders);
        }
        /// <summary>
        /// Get property name by expression for validator. Throws ArgumentException, if couldn't validate this property
        /// </summary>
        /// <typeparam name="TProp">The type of element of collection</typeparam>
        /// <param name="property">Expression which contains property</param>
        /// <returns>Property name</returns>
        private static string GetPropertyNameForValidator <TProp>(Expression <Func <TObject, TProp> > property)
        {
            var propertyInfo = ReactiveValidationHelper.GetPropertyInfo(typeof(TObject), property);

            return(propertyInfo.Name);
        }