Проверка ввода Xamarin Community Toolkit верна, даже если запись пуста
Это моя форма с двумя записями для почты и телефона и кнопкой Отправить
<StackLayout HorizontalOptions="FillAndExpand" Orientation="Vertical" Grid.Row="0" Margin="0,5,0,5">
<Label>
<Label.FormattedText>
<FormattedString>
<Span FontSize="16" Text="Phone" TextColor="#07987f"></Span>
<Span FontSize="16" Text=": " TextColor="#07987f"></Span>
</FormattedString>
</Label.FormattedText>
</Label>
<Entry x:Name="entryPhone" Placeholder="Phone" Text="{Binding Phone}">
<Entry.Behaviors>
<xct:TextValidationBehavior x:Name="phoneValidationRule" Flags="ValidateOnUnfocusing" RegexPattern="^07[0-9]{7}$"/>
</Entry.Behaviors>
</Entry>
</StackLayout>
<StackLayout HorizontalOptions="FillAndExpand" Orientation="Vertical" Grid.Row="1" Margin="0,5,0,5">
<Label>
<Label.FormattedText>
<FormattedString>
<Span FontSize="16" Text="E-mail" TextColor="#07987f"></Span>
<Span FontSize="16" Text=": " TextColor="#07987f"></Span>
</FormattedString>
</Label.FormattedText>
</Label>
<Entry x:Name="entryEmail" Placeholder="Email" Text="{Binding Email}">
<Entry.Behaviors>
<xct:EmailValidationBehavior x:Name="emailValidationRule" Flags="ValidateOnUnfocusing"/>
</Entry.Behaviors>
</Entry>
</StackLayout>
<Button Text="SEND" Clicked="ValidationFormForRegistraitonClicked" TextColor="#07987f" BackgroundColor="#eeeeee" Margin="0,10,0,10"></Button>
<StackLayout>
<Label IsVisible="{Binding IsValidMail}" Text="ENTER VALID EMAIL"></Label>
<Label IsVisible="{Binding IsValidPhone}" Text="ENTER VALID PHONE"></Label>
</StackLayout>
И это моя функция проверки:
private void ValidationFormForRegistraitonClicked(object sender, EventArgs e)
{
if (!emailValidationRule.IsValid)
viewModel.IsValidMail = true;
else
viewModel.IsValidMail = false;
if (!phoneValidationRule.IsValid)
viewModel.IsValidPhone = true;
else
viewModel.IsValidPhone = false;
}
У меня проблема, когда запись пуста, что является действительным заявлением, и это неправильно. У меня простое требование. Если ввести действительный адрес и действующий телефон, передайте его. Как это исправить?
1 ответ
Для телефона вы можете просто изменить время применения поведения, изменив
Flags
стоимость собственности до
"ValidateOnAttaching"
:
<Entry x:Name="entryPhone" Placeholder="Phone" Text="{Binding Phone}">
<Entry.Behaviors>
<xct:TextValidationBehavior x:Name="phoneValidationRule" Flags="ValidateOnAttaching" RegexPattern="^07[0-9]{7}$"/>
</Entry.Behaviors>
</Entry>
Для телефона вы можете использовать
MinimumLength
как упомянул Джеральд Верслуис в своем комментарии
<Entry x:Name="entryEmail" Placeholder="Email" Text="{Binding Email}">
<Entry.Behaviors>
<xct:EmailValidationBehavior x:Name="emailValidationRule" Flags="ValidateOnAttaching" MinimumLength="1"/>
</Entry.Behaviors>
</Entry>
Если в некоторых случаях этого недостаточно и вы хотите больше контролировать «когда» для проверки, вы можете позвонить
ForceValidate()
метод, например внутри вашего
ValidationFormForRegistraitonClicked()
обработчик событий для принудительной проверки / переоценки или когда вы считаете это необходимым.
private void ValidationFormForRegistraitonClicked(object sender, EventArgs e)
{
emailValidationRule.ForceValidate();
phoneValidationRule.ForceValidate();
if (!emailValidationRule.IsValid)
viewModel.IsValidMail = true;
else
viewModel.IsValidMail = false;
if (!phoneValidationRule.IsValid)
viewModel.IsValidPhone = true;
else
viewModel.IsValidPhone = false;
}