Я довольно новичок в WPF. В нашем текущем проекте мы добавили правила валидации для всех полей ввода данных, для которых нам нужна проверка. Мы также скопировали код (также размещенный в другом месте здесь, в stackoverflow), который рекурсивно перебирает все привязки и их правила проверки, чтобы узнать, действительно ли все данные действительны до сохранения данных.Как пропустить проверку для элементов, которые отключены?
Это наш код, который я думаю, что это место, чтобы решить поставленную задачу:
Public Function ValidateBindings(ByVal parent As DependencyObject) As Boolean
Dim valid As Boolean = True
Dim localValues As LocalValueEnumerator = parent.GetLocalValueEnumerator
While localValues.MoveNext
Dim entry As LocalValueEntry = localValues.Current
If BindingOperations.IsDataBound(parent, entry.Property) Then
Dim binding As Binding = BindingOperations.GetBinding(parent, entry.Property)
For Each rule In binding.ValidationRules
Dim result As ValidationResult = rule.Validate(parent.GetValue(entry.Property), Nothing)
If Not result.IsValid Then
Dim expression As BindingExpression = BindingOperations.GetBindingExpression(parent, entry.Property)
Validation.MarkInvalid(expression, New ValidationError(rule, expression, result.ErrorContent, Nothing))
valid = False
End If
Next
End If
End While
For i As Integer = 0 To VisualTreeHelper.GetChildrenCount(parent) - 1
Dim child As DependencyObject = VisualTreeHelper.GetChild(parent, i)
If Not ValidateBindings(child) Then
valid = False
End If
Next
Return valid
End Function
Я пытался выяснить, как использовать GetValue()
на имущество в IsEnabledProperty
зависимости от parent
, но мои попытки так далеко не удалось. Может ли кто-нибудь помочь мне с этим или нет неправильным способом мышления для решения этой проблемы?
В качестве альтернативы, я играл с мыслью о привязке ошибки проверки к «игнорировать любой контент», когда поле отключено, но для меня это больше беспокоит.
Я попытался установить Binding.NotifyOnValidationError
через связывание в XAML, привязать к одному и тому же значению для элемента IsEnabled
и NotifyOnValidationError
, но я не могу этого сделать, так как это не является DependencyProperty.
Другая вещь, которую я попытался было добавить свойство ElementIsEnabled
в классе валидации, не быть в состоянии сделать что-то подобное в XAML:
<Binding.ValidationRules>
<local:MustContainInteger ElementIsEnabled="{Binding SameBindingAsIsEnabled}" />
</Binding.ValidationRules>
Но это также не так ElementIsEnabled
не DependencyProperty на DependencyObject ,
В любом случае, любая помощь по этому вопросу будет принята с благодарностью.