Xamarin Community Toolkit InputValidation 连接按钮
Xamarin Community Toolkit InputValidation connect with button
我有一个简单的表单,用户可以在其中添加电子邮件:
<Entry Placeholder="Email" Text="{Binding Email}">
<Entry.Behaviors>
<xct:MultiValidationBehavior >
<xct:EmailValidationBehavior Flags="ValidateOnUnfocusing"/>
</xct:MultiValidationBehavior>
</Entry.Behaviors>
</Entry>
还有一个按钮:
<Button Text="Send" Command="{Binding LoadSendRegistrationCommand}" TextColor="#07987f" BackgroundColor="#eeeeee" Margin="0,10,0,10"></Button>
当点击按钮时如何检查和return消息如果电子邮件无效?
(一如既往)有多种方法可以做到这一点。如果您只是想在没有 MVVM/data-binding 的情况下从您的代码隐藏中执行此操作,您仍然有两个选择。
因为您使用的是 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");
}
此外,您可能想在 EmailValidationBehavior
上指定 MultivalidationBehavior.Error
属性,即:
<xct:EmailValidationBehavior xct:MultiValidationBehavior.Error="Email not valid" Flags="ValidateOnUnfocusing"/>
2。通过EmailValidationBehavior
您也可以直接使用 EmailValidationBehavior
来完成。为此,向 EmailValidationBehavior
添加一个 x:Name="myEmailValidation"
属性,您可以在代码隐藏中访问它:
if (!myEmailValidation.IsValid)
{
DisplayAlert("Error", "Email not valid", "OK");
}
else
{
DisplayAlert("Success", "All valid!", "OK");
}
3。通过数据绑定
我实际上注意到,在输入所有这些内容时,您确实为该按钮和电子邮件的值使用了 Command
的数据绑定。在这种情况下,您还可以绑定到 EmailValidationBehavior
或 MultiValidationBehavior
上的 IsValid
属性,然后将某些 UI 元素切换为可见或不可见,具体取决于那。
为此我们需要做几件事。我会专注于 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
的值,以便与 Label
IsVisible
一起正确使用它=39=]
- 添加转换器
<ContentPage.Resources>
<ResourceDictionary>
<xct:InvertedBoolConverter x:Key="invertBoolConverter" />
</ResourceDictionary>
</ContentPage.Resources>
应该是这样:)
可以在此处找到包含所有这些代码的工作示例:https://github.com/jfversluis/XCTInputValidationCodeBehindSample
我有一个简单的表单,用户可以在其中添加电子邮件:
<Entry Placeholder="Email" Text="{Binding Email}">
<Entry.Behaviors>
<xct:MultiValidationBehavior >
<xct:EmailValidationBehavior Flags="ValidateOnUnfocusing"/>
</xct:MultiValidationBehavior>
</Entry.Behaviors>
</Entry>
还有一个按钮:
<Button Text="Send" Command="{Binding LoadSendRegistrationCommand}" TextColor="#07987f" BackgroundColor="#eeeeee" Margin="0,10,0,10"></Button>
当点击按钮时如何检查和return消息如果电子邮件无效?
(一如既往)有多种方法可以做到这一点。如果您只是想在没有 MVVM/data-binding 的情况下从您的代码隐藏中执行此操作,您仍然有两个选择。
因为您使用的是 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");
}
此外,您可能想在 EmailValidationBehavior
上指定 MultivalidationBehavior.Error
属性,即:
<xct:EmailValidationBehavior xct:MultiValidationBehavior.Error="Email not valid" Flags="ValidateOnUnfocusing"/>
2。通过EmailValidationBehavior
您也可以直接使用 EmailValidationBehavior
来完成。为此,向 EmailValidationBehavior
添加一个 x:Name="myEmailValidation"
属性,您可以在代码隐藏中访问它:
if (!myEmailValidation.IsValid)
{
DisplayAlert("Error", "Email not valid", "OK");
}
else
{
DisplayAlert("Success", "All valid!", "OK");
}
3。通过数据绑定
我实际上注意到,在输入所有这些内容时,您确实为该按钮和电子邮件的值使用了 Command
的数据绑定。在这种情况下,您还可以绑定到 EmailValidationBehavior
或 MultiValidationBehavior
上的 IsValid
属性,然后将某些 UI 元素切换为可见或不可见,具体取决于那。
为此我们需要做几件事。我会专注于 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
的值,以便与 Label
IsVisible
一起正确使用它=39=]
- 添加转换器
<ContentPage.Resources>
<ResourceDictionary>
<xct:InvertedBoolConverter x:Key="invertBoolConverter" />
</ResourceDictionary>
</ContentPage.Resources>
应该是这样:)
可以在此处找到包含所有这些代码的工作示例:https://github.com/jfversluis/XCTInputValidationCodeBehindSample