38 lines
1.3 KiB
C#
38 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|
|
} |