C# MvvmCross Binding触控事件阻止关注MvxItemTemplate

C# MvvmCross Binding触控事件阻止关注MvxItemTemplate,c#,android,xamarin,mvvmcross,C#,Android,Xamarin,Mvvmcross,我有一个Android应用程序,它在HorizontalScrollView中嵌入了两个RecyclerViews。顶部的RecyclerView具有类别,当您选择一个类别时,底部的RecyclerView将列出该类别中的项目。为了检测所选类别,我尝试使用触摸事件。当EditText获得触摸事件时,该行被选中。这部分很好用。问题是,我还需要能够编辑类别列表中的一些字段。如果我将触摸事件绑定到EditText上,则当您单击它时,EditText不会获得焦点。我尝试改用FocusChanged事件,

我有一个Android应用程序,它在HorizontalScrollView中嵌入了两个RecyclerViews。顶部的RecyclerView具有类别,当您选择一个类别时,底部的RecyclerView将列出该类别中的项目。为了检测所选类别,我尝试使用触摸事件。当EditText获得触摸事件时,该行被选中。这部分很好用。问题是,我还需要能够编辑类别列表中的一些字段。如果我将触摸事件绑定到EditText上,则当您单击它时,EditText不会获得焦点。我尝试改用FocusChanged事件,但有时,当水平滚动时,顶部RecyclerView上的焦点会设置为第一个类别的EditText,从而导致所选类别发生更改。有没有一种方法可以在MvvmCross中绑定Touch事件,并且仍然让它使绑定的控件获得焦点

这是“我的项目”模板的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="2dp"
    android:paddingBottom="2dp"
    local:MvxBind="This View">
    <TextView
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        style="@style/TableEditText"
        local:MvxBind="Text Name; LongClick Name_LongClick; Touch Touch"
        android:id="@+id/txtName" />
    <EditText
        android:layout_width="110dp"
        android:layout_height="wrap_content"
        style="@style/TableEditText"
        android:inputType="numberDecimal|numberSigned"
        android:selectAllOnFocus="true"
        local:MvxBind="Text Cubes, Converter=FloatToStringConverter; Touch Touch"
        android:id="@+id/txtCubes" />
    <EditText
        android:layout_width="110dp"
        android:layout_height="wrap_content"
        style="@style/TableEditText"
        android:inputType="numberDecimal|numberSigned"
        android:selectAllOnFocus="true"
        local:MvxBind="Text Weight, Converter=IntToStringConverter; Touch Touch"
        android:id="@+id/txtWeight" />
    <EditText
        android:layout_width="500dp"
        android:layout_height="wrap_content"
        style="@style/TableEditText"
        android:inputType="textCapSentences"
        local:MvxBind="Text Note; Touch Touch"
        android:id="@+id/txtNote" />
    <ImageButton
        android:src="@drawable/ic_action_delete"
        android:scaleType="fitCenter"
        android:padding="3dp"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_gravity="center"
        local:MvxBind="Click DeleteClicked"
        android:id="@+id/btnDeleteCategory" />
</LinearLayout>
这在Setup.cs中

        registry.RegisterCustomBindingFactory<View>("Touch",
                                                  view => new MvxViewTouchBinding(view));
registry.RegisterCustomBindingFactory(“触摸”,
视图=>新MvxViewTouchBinding(视图));

我必须将ViewOnTouch处理程序更改为:

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

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

显然,Handled默认为true,这会导致事件链在调用此事件链后终止。将其设置为false会告诉系统事件尚未正确处理,因此它会调用行中的下一个处理程序。我猜是后续处理程序设置了焦点。谢谢@Cheesebaron

我不得不将ViewOnTouch处理程序更改为:

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

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

显然,Handled默认为true,这会导致事件链在调用此事件链后终止。将其设置为false会告诉系统事件尚未正确处理,因此它会调用行中的下一个处理程序。我猜是后续处理程序设置了焦点。谢谢@Cheesebaron

试试这个-试试设置
eventArgs.Handled=false@Cheesebaron就是他干的!谢谢奶酪!尝试此操作-尝试设置
eventArgs.Handled=false@Cheesebaron就是他干的!谢谢奶酪!
    private void ViewOnTouch(object sender, View.TouchEventArgs eventArgs)
    {
        eventArgs.Handled = false;

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