Telerik RadMaskedNumericInput разрешает пустое значение

#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. Спасибо, это мне очень помогло.