Я пытаюсь выполнить проверку в своем приложении WPF, используя решение в Обнаружение ошибок проверки WPF .
public static bool IsValid(DependencyObject parent)
{
// Validate all the bindings on the parent
bool valid = true;
LocalValueEnumerator localValues = parent.GetLocalValueEnumerator();
while (localValues.MoveNext())
{
LocalValueEntry entry = localValues.Current;
if (BindingOperations.IsDataBound(parent, entry.Property))
{
Binding binding = BindingOperations.GetBinding(parent, entry.Property);
foreach (ValidationRule rule in binding.ValidationRules)
{
ValidationResult result = rule.Validate(parent.GetValue(entry.Property), null);
if (!result.IsValid)
{
BindingExpression expression = BindingOperations.GetBindingExpression(parent, entry.Property);
System.Windows.Controls.Validation.MarkInvalid(expression, new ValidationError(rule, expression, result.ErrorContent, null));
valid = false;
}
}
}
}
// Validate all the bindings on the children
for (int i = 0; i != VisualTreeHelper.GetChildrenCount(parent); ++i)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (!IsValid(child))
{
valid = false;
}
}
return valid;
}
Проблема, с которой я сталкиваюсь, заключается в том, что, когда я перебираю код для TextBox, я не получаю свойство Text. Я получаю только свойства PageHeight, Instance и UndoManagerInstance. Поэтому я не могу проверить правила для привязки на TextBox.
Кто-нибудь знает, почему я не могу получить правильные свойства? Есть ли другой способ принудительной проверки достоверности элементов управления в WPF? Я не смог найти никого другого, у кого была эта проблема.
Обновление:
TextBoxes, которые я пытаюсь проверить, находятся в DataTemplate. Я обнаружил, что если я скопирую один из текстовых полей и поместлю его прямо в окно, я смогу получить данные. Используя Woodstock, я увидел, что источником данных для TextBoxes в шаблоне является «ParentTemplate», но «Text» для TextBox за пределами шаблона.
Итак, вопрос теперь в том, как я могу получить свойства DependencyProperties для элементов управления внутри a DataTemplate?