Files
BeWoPlaner/ValidationLibrary/AttributeValidator.cs

38 lines
1.3 KiB
C#
Raw Normal View History

2016-06-27 01:45:38 +02:00
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);
}
}
}