MVVMCross按钮命令绑定未触发

3

关于StackOverflow上的以下问题,我希望你能进行翻译。我正试图像这里描述的那样,为一个按钮设置触摸命令,但是没有任何反应。

在Android中使用MvvmCross触摸命令绑定
<Button
xmlns:local="http://schemas.android.com/apk/res/Test.UI.Droid"
android:text="Office"
android:layout_column="0"
android:id="@+id/imageButton1" 
local:MvxBind="{'Touch':{'Path':'ItemClickCommand'}}"/>  


public IMvxCommand ItemClickCommand
{
get
{
return new MvxRelayCommand(() => this.RequestNavigate<Tests.OfficeViewModel>(true));
}
}  

在上述代码中,我做错了什么,为什么它没有触发。
2个回答

2

目前还没有关于Touch的绑定。

public event EventHandler<View.TouchEventArgs> Touch

如果您想添加一个绑定,那么可以在StackOverflow上搜索如何设置新的绑定 - 例如mvvmcross touch command binding in android中的答案提供了一个相当完整的示例。
但是... 对于大多数按钮按下事件,您可能只需要使用:
public event EventHandler Click

因为它是一个EventHandler而不是EventHandler<TCustom>,所以它会自动绑定。
例如:
<Button
xmlns:local="http://schemas.android.com/apk/res/Test.UI.Droid"
android:text="Office"
android:layout_column="0"
android:id="@+id/imageButton1" 
local:MvxBind="{'Click':{'Path':'ItemClickCommand'}}"/>  

应该可以正常工作 - 这可能是您正在寻找的内容 - 您希望响应按钮的点击,而不仅仅是触摸


为了调试绑定问题,值得查看MvxBindingTrace输出 - 通常它会告诉您何时无法绑定到某些内容 - 如果没有,请在github问题上记录错误 :)


0

我在Android上遇到了同样的问题。这是Stuart的答案,它起作用了。我只是想把它放在这里,以便更方便地为Android找到。只需将此类放入您的项目中,命令绑定就会开始在发布模式下在设备上工作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace BestSellers.Droid
{
  // things in this class are only required in order to prevent the linker   overoptimising!
class LinkerIncludePlease
{
    private void IncludeVisibility(View widget)
    {
        widget.Visibility = widget.Visibility + 1;           
    }

    private void IncludeClick(View widget)
    {
        widget.Click += (s,e) => {};
    }

    private void IncludeRelativeLayout(RelativeLayout relativeLayout)
    {
        relativeLayout.Click += (s, e) => { };
    }
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接