Проверка ввода 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;              
}
Другие вопросы по тегам