Если вы установите ValidationRule.ValidationStep на ValidationStep.CommitedValue или ValidationStep.UpdatedValue, параметр value в методе Validate будет иметь тип BindingExpression, и вы можете получить DataContext с свойством BindingExpression.DataItem.
К сожалению, он работает только после обновления источника привязки.
Вот пример:
public class RiskCodeValidation : ValidationRule
{
public RiskCodeValidation()
: base(ValidationStep.CommittedValue, true)
{
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var expression = value as BindingExpression;
if (expression != null)
{
var sourceItem = expression.DataItem;
if (sourceItem != null)
{
var propertyName = expression.ParentBinding != null && expression.ParentBinding.Path != null ? expression.ParentBinding.Path.Path : null;
var sourceValue = sourceItem.GetType().GetProperty(propertyName).GetValue(sourceItem, null);
// TODO: do validation logic based on sourceItem, propertyName and sourceValue.
}
}
return ValidationResult.ValidResult;
}
}
Я знаю, что может на самом деле atribute постоянного значения свойству RiskCodeValidation, но у меня нет никакого ideian, как передать Atributte модели представления х - viewmodel - это datacontext окна. – Louro