using System.Globalization; using System.Reflection; using System.Windows.Controls; using System.Windows.Data; namespace ValidationLibrary { public class AttributeValidator : ValidationRule { public BindingExpression ExpressionToValidate { get; set; } public override ValidationResult Validate(object pValue, CultureInfo pCultureInfo) { bool lValid = true; if (ExpressionToValidate != null) { PropertyInfo lPropInfo = null; object lCurrentObject = ExpressionToValidate.DataItem; foreach (string iPropName in ExpressionToValidate.ParentBinding.Path.Path.Split('.')) { lPropInfo = lCurrentObject.GetType().GetProperty(iPropName); lCurrentObject = lPropInfo.GetValue(lCurrentObject, null); } object[] lAttributes = lPropInfo.GetCustomAttributes(typeof (ValidationAttribute), true); if (lAttributes.Length > 0) { lValid = ((ValidationAttribute) lAttributes[0]).Validate(pValue); } } // TODO: Nachricht, am besten als Property im ValidationAttribut return new ValidationResult(lValid, null); } } }