2017-03-07 81 views
1
<CC.CustomEditText 
     android:id="@+id/receptionIdentityArticle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="8dp" 
     android:theme="@style/ExtendProTheme" 
     android:maxLength="20" 
     style="@style/ExtendProTheme.EditText" 
     android:layout_below="@+id/suppliersSearchInputLabel" 
     local:MvxBind=" Text ArticleSearchClause, Mode=TwoWay; EnterCommand SearchArticlesCommand; Error Errors['ArticleSearchClause']; Click OnSearchClickCommand" /> 

所以我有一个CustomEdit通过重写两个事件Mvvmcross绑定仅单击焦点后

this.KeyPress += OnEnterKeyPressed; 
    this.FocusChange += OnFocusChange; 

我的问题是,单击命令只触发第二次是从EditText上不同的我点击的EditText触发。第一次它只是聚焦,然后第二次点击命令触发点击它。我想这是它应该如何工作,但我想赶上第一次点击它在EditText上完成。另一个事件可能会被触发,但是我无法在EditText上找到所有可能绑定的文档。任何想法如何捕获第一次点击EditText?

回答

1

正如@hankide所说的,改用Touch事件。您将需要创建一个自定义绑定。我恰巧刚刚处理了这所以在这里,它是:

public class MvxViewTouchBinding 
    : MvxAndroidTargetBinding 
{ 
    private readonly View _view; 
    private IMvxCommand _command; 

    public MvxViewTouchBinding(View view) : base(view) 
    { 
     _view = view; 
     _view.Touch += ViewOnTouch; 
    } 

    private void ViewOnTouch(object sender, View.TouchEventArgs eventArgs) 
    { 
     eventArgs.Handled = false; 

     if (_command != null) 
     { 
      _command.Execute(); 
     } 
    } 

    public override void SetValue(object value) 
    { 
     _command = (IMvxCommand)value; 
    } 

    protected override void Dispose(bool isDisposing) 
    { 
     if (isDisposing) 
     { 
      _view.Touch -= ViewOnTouch; 
     } 
     base.Dispose(isDisposing); 
    } 

    protected override void SetValueImpl(object target, object value) 
    { 
    } 

    public override Type TargetType 
    { 
     get { return typeof(IMvxCommand); } 
    } 

    public override MvxBindingMode DefaultMode 
    { 
     get { return MvxBindingMode.OneWay; } 
    } 
} 

,并在您Setup.cs把

protected override void FillTargetFactories(MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry) 
    { 
     base.FillTargetFactories(registry); 
     registry.RegisterCustomBindingFactory<View>("Touch", 
                view => new MvxViewTouchBinding(view)); 
    } 

然后,你可以绑定到触摸,而不是点击。

+0

我会试一下。谢谢! – CiucaS

2

您可以使用Touch事件而不是Click来让事件在第一次点击时触发。不幸的是,你描述的行为与Android是正常的(即使令人困惑),并且与MVVMCross无关。