Xamarin表单验证.聚合来自多个控制行为的结果

本文关键字:控制 结果 验证 表单 Xamarin | 更新日期: 2023-09-27 18:09:57

我有一个有3-4个条目控件的页面。我创建了一个行为来验证这些条目。我还扩展了入口类,使其具有边框、边框颜色和边框半径。Xaml是这样的

<controls:ExtendedEntry x:Name="emailaddressEntry"
                                            Grid.Row="0"
                                            Grid.Column="1"
                                            BorderColor="Black"
                                            HasBorder="True"
                                            IsEnabled="True"
                                            Placeholder="Email Address"
                                            Text="{Binding EmailAddress}">
                        <controls:ExtendedEntry.Behaviors>
                            <v:EntryValidatorBehavior x:Name="EmailAddressValidator"
                                                      IsCheckEmail="True"
                                                      IsCheckEmpty="True" />
                        </controls:ExtendedEntry.Behaviors>
                    </controls:ExtendedEntry>

现在EntryValidator行为有一个IsValid属性,它告诉我们控件是否处于有效状态。我想做的是根据所有条目的IsValid启用或禁用提交按钮。像这样

<Button Command="{Binding OnCreateCommand}" Text="Submit Account Application" BindingContext="{x:Reference EmailAddressValidator,PasswordValidator,AddressValidator}" IsEnabled="{Binding Path=EmailAddressValidator.IsValid && PasswordValidator.IsValid && AddressValidator.IsValid}"/>

Xamarin表单验证.聚合来自多个控制行为的结果

我不认为你可以在你的Button <Button Command="{Binding OnCreateCommand}" Text="Submit Account Application" BindingContext="{x:Reference EmailAddressValidator,PasswordValidator,AddressValidator}"中做到这一点,但为什么不在你的PageModel中创建一个布尔值呢?

ExtendedEntry IsValid属性绑定到PageModel中的布尔值,即IsEmailValid。然后在你的PageModel一个布尔值IsFormValid,你绑定你的按钮像这样:<Button Command="{Binding OnCreateCommand}" Text="Submit Account Application" IsEnabled="{Binding IsFormValid}" /> .

还需要在PageModel上实现IPropertyChanged或使用Fody。