У меня есть TextBox в моем представлении, привязанный к свойству MyText в моей модели просмотра. Еще у меня есть ValidationRule для входа.
Вот TextBox в моем представлении:
<TextBox>
<TextBox.Text>
<Binding Path = "MyText"
UpdateSourceTrigger = "PropertyChanged"
Mode = "TwoWay"
ValidatesOnNotifyDataErrors = "True"
ValidatesOnDataErrors = "True"
NotifyOnValidationError = "True">
<Binding.ValidationRules>
<local:FormulaValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
А вот и мой класс валидации:
Public Class MyTextValidationRule
Inherits ValidationRule
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim validationRes = MyParser.ValidateText(value)
If validationRes Then
Return ValidationResult.ValidResult
Else
Return New ValidationResult(False, "Input is not valid")
End If
End Function
End Class
Что я хочу заключается в том, что мое свойство MyText обновляется, даже если введенный текст недействителен, однако, как и то, что у меня есть сейчас, свойство обновляется только в том случае, если текст действителен. Есть ли способ сделать это, т.е. обновить свойство или получить доступ к тексту моего TextBox?





Что вы можете сделать, если хотите показать видимый индикатор того, что ввод неверен, но все же вести учет этого, - это использовать ValidatesOnExceptions, следующая статья дает хорошее объяснение всего этого:
Проверка данных в WPF
Это как бы предназначено для случаев, если есть ошибка преобразования в свойство поддержки, но ничто не мешает вам ввести значение в поле ViewModel в установщике свойств, а затем выполнить синтаксический анализ и выбросить исключение по желанию. Таким образом, у вас будет копия набора значений, а также пользовательский интерфейс, показывающий, что произошла ошибка.
Установка для свойства ValidationStepValidationRule значения UpdatedValue приведет к его запуску после, свойство источника было обновлено:
<Binding.ValidationRules>
<local:FormulaValidationRule ValidationStep = "UpdatedValue" />
</Binding.ValidationRules>
Значение по умолчанию - RawProposedValue, что означает, что правило проверки выполняется до того, как произойдет преобразование значения и будет установлено свойство источника.
Попробуйте свойство ValidationStep класса ValidationRule docs.microsoft.com/en-us/dotnet/api/…