[英]Xamarin Forms Validation. Aggregate the result from multiple control behaviors
我有一个包含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}"/>
我认为您无法在您的Button
<Button Command="{Binding OnCreateCommand}" Text="Submit Account Application" BindingContext="{x:Reference EmailAddressValidator,PasswordValidator,AddressValidator}"
但为什么不在其中创建布尔值您的PageModel哪个适合您?
将您的ExtendedEntry
IsValid
属性绑定到PageModel中的布尔值,即IsEmailValid
。 然后在您的PageModel中,将一个boolean IsFormValid
绑定到您的按钮,如下所示: <Button Command="{Binding OnCreateCommand}" Text="Submit Account Application" IsEnabled="{Binding IsFormValid}" />
。
另外,您还需要在PageModel上实现IPropertyChanged
或使用Fody.PropertyChanged来简化生活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.