(一如既往)有多种方法可以做到这一点。如果您只想在没有 MVVM/数据绑定的情况下从代码隐藏中执行此操作,您仍然有两个选择。
由于您使用的是,MultiValidationBehavior
您可以给它一个x:Name="myValidation"
属性并从您的代码隐藏中访问它。然后,您将能够:
1.通过MultivalidationBehavior
if (!myValidation.IsValid)
{
// Somehow show the errors, this needs some extra code, but you get the idea :)
DisplayAlert("Error", myValidation.Errors, "OK");
}
此外,您可能希望在 上指定MultivalidationBehavior.Error
属性EmailValidationBehavior
,即:
<xct:EmailValidationBehavior xct:MultiValidationBehavior.Error="Email not valid" Flags="ValidateOnUnfocusing"/>
2.通过EmailValidationBehavior
也可以EmailValidationBehavior
直接使用。为此,x:Name="myEmailValidation"
向您添加一个属性,EmailValidationBehavior
您可以在代码隐藏中访问它:
if (!myEmailValidation.IsValid)
{
DisplayAlert("Error", "Email not valid", "OK");
}
else
{
DisplayAlert("Success", "All valid!", "OK");
}
3.通过数据绑定
实际上,在键入所有这些内容时,我实际上注意到您确实使用了带有该Command
按钮的数据绑定和电子邮件的值。在这种情况下,您还可以绑定到orIsValid
上的属性,然后根据该属性将某些 UI 元素切换为可见或不可见。EmailValidationBehavior
MultiValidationBehavior
为此,我们需要做几件事。我将专注于EmailValidationBehavior
,我相信您可以解决这个MultiValidationBehavior
问题。
将绑定添加到您的EmailValidationBehavior
:<xct:EmailValidationBehavior IsValid="{Binding EmailValid}" Flags="ValidateOnUnfocusing"/>
为您的对象添加一个支持属性BindingContext
:
private bool emailValid;
public bool EmailValid
{
get => emailValid;
set
{
emailValid = value;
OnPropertyChanged();
}
}
- 添加 UI 元素以向用户指示。当然,这也可能是禁用按钮或其他东西。
<Label Text="Email not valid" TextColor="Red" IsVisible="{Binding EmailValid, Converter={StaticResource invertBoolConverter}}" />
请注意,我还需要使用InvertedBoolConverter
来自工具包的值来反转值IsValid
以正确使用IsVisible
它Label
- 添加转换器
<ContentPage.Resources>
<ResourceDictionary>
<xct:InvertedBoolConverter x:Key="invertBoolConverter" />
</ResourceDictionary>
</ContentPage.Resources>
应该是这样的:)
所有这些代码的工作示例可以在这里找到:https ://github.com/jfversluis/XCTInputValidationCodeBehindSample