<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" />
所以我有一个与EditText不同的CustomEdit通过覆盖两个事件
this.KeyPress += OnEnterKeyPressed;
this.FocusChange += OnFocusChange;
我的问题是我第二次单击EditText时会触发Click命令。第一次它只是聚焦然后我点击它第二次Click命令触发。我想它应该如何工作,但我想抓住它在EditText上完成的第一次点击。另一个事件可能是它被触发但我找不到一个包含EditText所有可能绑定的文档。任何想法我如何能够第一次点击EditText?
答案 0 :(得分:2)
您可以使用Touch
事件代替Click
来使第一次点击时触发事件。不幸的是,你所描述的行为对于Android是正常的(尽管令人困惑)并且与MVVMCross无关。
答案 1 :(得分: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));
}
然后您可以绑定到Touch而不是Click。