private static void SecondPropertyValidator(PropertyValidationArgs <EmployeeVM, EmployeeVM, string> args)
 {
     if (args.Owner.Test.InvalidItemsOfSecondPropertyValidator.Contains(args.Target))
     {
         args.AddError("Second property validator error");
     }
 }
            private static void PerformValidation(PropertyValidationArgs <RootVM, RootVM, ChildVM> args)
            {
                string errorMessage;

                if (args.Owner.ValidationErrors.TryGetValue(args.TargetProperty, out errorMessage))
                {
                    args.AddError(errorMessage);
                }
            }
 public void PerformValidation <TOwnerVM, TTargetVM, TValue>(
     PropertyValidationArgs <TOwnerVM, TTargetVM, TValue> args,
     object validatorKey = null
     )
     where TOwnerVM : IViewModel
     where TTargetVM : IViewModel
 {
     PerformValidation(
         errorMessage => args.AddError(errorMessage),
         ValidatorType.Property,
         args.Owner,
         args.Target,
         validatorKey,
         args.TargetProperty
         );
 }
        private static PropertyValidationArgs <IViewModel, EmployeeVM, string> CreateArgs(
            IViewModel owner,
            EmployeeVM target,
            ValidationStep step  = ValidationStep.Value,
            IValidator validator = null
            )
        {
            validator = validator ?? Mock <IValidator>();

            var path = Path.Empty.Append(owner);

            if (target != owner)
            {
                path = path.Append(target);
            }

            path = path.Append(EmployeeVM.ClassDescriptor.Name);

            return(PropertyValidationArgs <IViewModel, EmployeeVM, string> .Create(
                       validator,
                       new ValidationRequest(step, path)
                       ));
        }