TextBox с проверкой. Как обновить целевое свойство, даже если введенный текст недействителен? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть 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?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Установка свойства ValidationStep для ValidationRule на UpdatedValue приведет к его запуску после , свойство источника было обновлено:

<Binding.ValidationRules>
    <local:FormulaValidationRule ValidationStep="UpdatedValue"  />
</Binding.ValidationRules>

Значением по умолчанию является RawProposedValue, что означает, что правило проверки запускается до преобразования значения и задается свойство источника.

0 голосов
/ 28 августа 2018

Что вы можете сделать, если вы хотите показать видимый индикатор того, что ввод неправильный, но при этом вести учет этого, - это использовать ValidatesOnExceptions, следующая статья дает хорошее объяснение всего этого: Проверка данных в WPF

Это как бы предназначено для случаев, когда есть ошибка преобразования в свойство backing, но ничто не мешает вам перенести значение в поле ViewModel в установщике свойств, затем выполнить синтаксический анализ и вызвать Exception по желанию. Таким образом, у вас будет копия набора значений, а также пользовательский интерфейс, показывающий, что произошла ошибка.

...