如何使用棱镜处理行为?我有以下代码,我想知道如何处理" enrtyEmail.IsValid"属性?如何在ViewModel中找到EmailValidatorBehavior的状态?
<Entry x:Name="entryEmail">
<Entry.Behaviors>
<local:EmailValidatorBehavior />
</Entry.Behaviors>
</Entry>
答案 0 :(得分:2)
行为是一个BindableObject,因此您只需将BindableProperty添加到您的EmailValidatorBehavior即可。
public class EmailValidatorBehavior : BehaviorBase<Entry>
{
public static readonly BindableProperty IsEmailValidProperty =
BindableProperty.Create( nameof( IsEmailValid ), typeof( bool ), typeof( EmailValidatorBehavior ), false, BindingMode.OneWayToSource );
public bool IsEmailValid
{
get { return (bool)GetValue( IsEmailValidProperty ); }
set { SetValue( IsEmailValidProperty, value ); }
}
}
然后从ViewModel
绑定到该属性<Entry Text="{Binding EmailAddress}">
<Entry.Behaviors>
<local:EmailValidatorBehavior IsEmailValid="{Binding IsEmailValid}" />
</Entry.Behaviors>
</Entry>
编辑:请注意,如果不设置BindingMode,绑定将不会从Behavior传播到ViewModel。鉴于设置的性质,最合适的BindingMode将为OneWayToSource
,因为这使得该属性仅对ViewModel有效读取。
请参阅https://github.com/dansiegel/Validation-With-Prism-Behavior了解工作示例