Установка для свойства ValidationStep
значения UpdatedValue
означает, что правило проверки будет выполняться после свойства источника было обновлено.Если исходное свойство не обновлено, правило проверки не будет запущено.Значение по умолчанию для свойства ValidationStep
равно RawProposedValue
, что означает, что правило проверки выполняется до преобразования значения.
Так как checkDescriptionTxtBox
работает, вы должны просто удалить ValidationStep="UpdatedValue"
из TextBoxValidator
из parameterTxtBox
.
Но я хочу проверить значение после свойства источникабыл обновленЯ отладил метод проверки.Во время checkDescriptionTxtBox значение параметра проверки передается в виде строки, но когда значение параметра проверки для параметраTTBBox не передается в виде строки, вместо значения привязки разницы.Поэтому я хочу проверить значение после обновления свойства источника.Как этого добиться?
Используйте value
к BindingExpression
a, используйте некоторое отражение:
public class TextBoxValidator : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
string s = null;
BindingExpression be = value as BindingExpression;
if(be != null)
{
object sourceObject = be.ResolvedSource;
string sourceProperty = be.ResolvedSourcePropertyName;
if(sourceObject != null && sourceProperty != null)
{
PropertyInfo pi = sourceObject.GetType().GetProperty(sourceProperty);
s = pi.GetValue(sourceObject) as string;
}
}
else
{
s = value as string;
}
if (string.IsNullOrEmpty(s))
return new ValidationResult(false, "Value cannot be empty");
return ValidationResult.ValidResult;
}
}
В настоящее время я использую .Net 4.Я надеюсь быть. ResolvedSource;и be.ResolvedSourcePropertyName поддерживается в .Net 4.5.Тогда как я могу добиться этого в .Net 4?
Это должно работать в .NET Framework 4:
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
string s = null;
BindingExpression be = value as BindingExpression;
if (be != null)
{
object sourceObject = be.DataItem;
string sourceProperty = be.ParentBinding.Path.Path;
if (sourceObject != null && sourceProperty != null)
{
PropertyInfo pi = sourceObject.GetType().GetProperty(sourceProperty);
s = pi.GetValue(sourceObject) as string;
}
}
else
{
s = value as string;
}
if (string.IsNullOrEmpty(s))
return new ValidationResult(false, "Value cannot be empty");
return ValidationResult.ValidResult;
}