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

时间:2016-10-01 00:00:57

标签: c# validation xaml xamarin xamarin.forms

我有一个有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 Behavior具有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}"/>

1 个答案:

答案 0 :(得分:3)

我不认为您可以在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.PropertyChanged让您的生活更轻松。