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}"/>
我不认为你可以在你的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。