public ErrorInfoHandler(FrameworkElement element, INotifyDataErrorInfo errorInfo, DependencyProperty dp)
 {
     _element     = element;
     _bindingExpr = element.GetBindingExpression(dp);
     // ReSharper disable once PossibleNullReferenceException
     _propertyName    = _bindingExpr.ResolvedSourcePropertyName;
     _errorInfo       = errorInfo;
     _errorsContainer = errorInfo as IPropertyErrorsContainer;
 }
        public static IDisposable SetupValidation <T, TProperty>(this object viewModel, IPropertyErrorsContainer errorsContainer, Expression <Func <T, TProperty> > expr, Func <T, TProperty, string> validateFunc)
        {
            var vm   = viewModel ?? throw new ArgumentNullException(nameof(viewModel));
            var name = expr.GetMember();
            var type = typeof(IPropertyErrorsContainer <>).MakeGenericType(vm.GetType());
            // ReSharper disable once PossibleNullReferenceException
            var setupValidationMethod = type.GetMethod("SetupValidation").MakeGenericMethod(typeof(TProperty));
            var result = (IDisposable)setupValidationMethod.Invoke(errorsContainer, new object[] { name, validateFunc });

            return(result);
        }
        public static IDisposable SetupValidation <T, TProperty>(this IPropertyErrorsContainer <T> vm, Expression <Func <T, TProperty> > expr, Func <T, TProperty, string> validateFunc)
        {
            var name = expr.GetMember();

            return(vm.SetupValidation(name, validateFunc));
        }