#c# #wpf #validation #xaml #telerik
#c# #wpf #проверка #xaml #telerik
Вопрос:
Моя цель — получить MaskedNumericInput
поле, в котором разрешены числа между 0
— 9999
. Его значение привязано к целому числу.
<telerik:RadMaskedNumericInput Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type WpfExt:RadGridViewExt}}, Path=DataContext.MaxInvoicesPerConcatenationFile, Mode=TwoWay}"
Mask="#4" UpdateValueEvent="LostFocus" TextMode="PlainText"
maskedInput:MaskedInputExtensions.Maximum="9999"/>
Я не использую какой-либо валидатор или что-то в этом роде. Кажется, что, возможно, это похоже на внутренний валидатор. Если я сниму флажок, он будет выделен красным с сообщением об ошибке:
«Значение» «не удалось преобразовать».
Есть ли какой-нибудь способ заставить его работать с пустым значением?
Есть ли какой-либо способ разрешить ввод пустым?
Ответ №1:
Вы можете установить AllowNull
для присоединенного свойства значение False
, тогда ошибка исчезнет, и значение 0
будет присвоено связанному свойству при снятии маскированного поля ввода, хотя оно отображается пустым.
<telerik:RadMaskedNumericInput Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type WpfExt:RadGridViewExt}}, Path=DataContext.MaxInvoicesPerConcatenationFile, Mode=TwoWay}"
Mask="#4" UpdateValueEvent="LostFocus" TextMode="PlainText"
maskedInput:MaskedInputExtensions.Maximum="9999"
maskedInput:MaskedInputExtensions.AllowNull="False"/>
Вопреки документации, AllowNull
свойство установлено true
по умолчанию, а не false
. Таким образом, при очистке ввода значение будет установлено null
равным , но поскольку ваше связанное свойство типа int
не может быть null
, вы получите эту ошибку. Из документации по AllowNull
:
По умолчанию RadMaskedNumericInput и RadMaskedCurrencyInput не позволяют устанавливать значение null для их свойства Value. Вместо этого нулевое значение преобразуется в 0. Чтобы изменить это поведение и разрешить нулевые значения, вы можете установить MaskedInputExtensions .AllowNull присвоил свойству значение True.
При этом альтернативой является изменение вашего свойства на тип nullable int?
, который будет установлен null
, когда поле ввода будет очищено без отображения какой-либо ошибки, но вам придется иметь дело со null
значением в вашей модели представления. Какой подход подходит лучше всего, зависит от ваших требований.
Комментарии:
1. Спасибо, это мне очень помогло.