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); } } }
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); }