3

这是关于stackoverflow的以下问题。我正在尝试对此处描述的按钮进行触摸命令,但没有任何反应。android中的mvvmcross touch命令绑定

<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));
}
}  

我在上面的代码中做错了什么,为什么它没有触发。

4

2 回答 2

2

目前没有针对 a 的绑定Touch

public event EventHandler<View.TouchEventArgs> Touch

如果您想添加一个,然后在 StackOverflow 上搜索如何设置新绑定 - 例如,在 android 中的 mvvmcross touch 命令绑定中的答案给出了一个完整的示例。


但是......对于大多数按钮按下,您可能只使用:

public event EventHandler Click

因为它是 anEventHandler而不是 an EventHandler<TCustom>then this 自动绑定。

IE:

<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'}}"/>  

应该可以工作——这可能是你正在寻找的——你想响应Click一个按钮,而不仅仅是一个Touch


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

于 2012-10-18T09:29:51.743 回答
0

我在安卓上遇到了同样的问题。这是斯图尔特的答案,它奏效了。我只是想把它放在这里以便更方便地查找 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) => { };
    }
}

}

于 2013-09-18T02:41:05.023 回答