C# Xamarin社区工具包输入验证连接按钮
我有一个用户添加电子邮件的简单表单:C# Xamarin社区工具包输入验证连接按钮,c#,validation,xamarin.forms,xamarin-community-toolkit,C#,Validation,Xamarin.forms,Xamarin Community Toolkit,我有一个用户添加电子邮件的简单表单: <Entry Placeholder="Email" Text="{Binding Email}"> <Entry.Behaviors> <xct:MultiValidationBehavior >
<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>
当单击按钮时,如果电子邮件无效,如何检查并返回消息?有多种方法(通常)可以做到这一点。如果您只想在不使用MVVM/数据绑定的情况下从代码隐藏中执行此操作,那么您仍然有两个选项
由于您使用的是multilidationbehavior
,因此可以给它一个x:Name=“myValidation”
属性,并从代码隐藏处访问它。然后,您将能够执行以下操作:
1.通过multilidationbehavior
如果(!myValidation.IsValid)
{
//以某种方式显示错误,这需要一些额外的代码,但您得到了这样的想法:)
DisplayAlert(“Error”,myValidation.Errors,“OK”);
}
此外,您可能希望在EmailValidationBehavior
上指定MultilidationBehavior.Error
属性,即:
2.通过EmailValidationBehavior
您还可以直接使用EmailValidationBehavior
来执行此操作。为此,将x:Name=“myEmailValidation”
属性添加到您的EmailValidationBehavior
中,您可以在代码隐藏中访问该属性:
if(!myEmailValidation.IsValid)
{
显示警报(“错误”、“电子邮件无效”、“确定”);
}
其他的
{
DisplayAlert(“成功”、“全部有效!”、“确定”);
}
3.通过数据绑定
我实际上注意到,在键入所有这些内容时,您确实使用了命令对该按钮和电子邮件的值进行数据绑定。在这种情况下,您还可以绑定到EmailValidationBehavior
或MultilidationBehavior
上的IsValid
属性,然后根据该属性将某些UI元素切换为可见或不可见
为此,我们需要做几件事。我将重点介绍EmailValidationBehavior
,我相信您可以为MultilidationBehavior
找到答案
将绑定添加到您的EmailValidationBehavior
:
将备份属性添加到BindingContext
中的对象:
private bool emailValid;
公共bool-EmailValid
{
get=>emailValid;
设置
{
emailValid=值;
OnPropertyChanged();
}
}
添加UI元素以向用户指示。当然,这也可能是禁用按钮之类的<代码>
请注意,我还需要使用工具箱中的InvertedBoolConverter
来反转IsValid
中的值,以便正确使用标签的IsVisible
添加转换器
应该是这样:)
包含所有这些代码的工作示例可以在此处找到:您不需要将转换器添加为资源,因为它实现了IMarkupExtension。@GeraldVersluis hey man我观看了您的utube频道上的每一个视频。继续前进!我的建议是在单独的视频中浏览XCT的所有功能。祝你今天愉快谢谢@Rajzer!谢谢你!将会有更多的XCT视频,我想这可能是其中之一:)效果很好。但是,Flags=“ValidateOnUnfocusing”在请求时不会触发它。例如,如果我们需要在单击按钮时触发验证行为,这是不可能的。无论是从ViewModel还是从ViewModel。作为我之前评论的解决方法,您可以在单击按钮事件上执行以下操作,并且在视图模型上,您至少必须手动验证:EmailValidator.ForceValidate();