Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin社区工具包输入验证连接按钮_C#_Validation_Xamarin.forms_Xamarin Community Toolkit - Fatal编程技术网

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();