如何使用Xamarin.Forms处理Prism中的行为

时间:2017-02-27 14:54:17

标签: xamarin.forms prism

如何使用棱镜处理行为?我有以下代码,我想知道如何处理" enrtyEmail.IsValid"属性?如何在ViewModel中找到EmailValidatorBehavior的状态?

<Entry x:Name="entryEmail">  
  <Entry.Behaviors>  
    <local:EmailValidatorBehavior />  
  </Entry.Behaviors>  
</Entry>      

1 个答案:

答案 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了解工作示例