MVVMCross按钮命令绑定未触发

时间:2012-10-18 09:02:23

标签: android xamarin.android mvvmcross

这是关于stackoverflow的以下问题。我试图按照这里描述的按钮触摸命令,但没有任何反应。 mvvmcross touch command binding in android

<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 个答案:

答案 0 :(得分:1)

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

应该有效 - 这可能就是您要找的 - 您想要回复按钮的Click,而不仅仅是Touch


要调试绑定问题值得查看MvxBindingTrace输出 - 通常它会告诉你什么时候它不能绑定到东西 - 如果没有,那么请记录github问题上的bug :)

答案 1 :(得分:0)

我遇到了与Android相同的问题。这是斯图尔特的答案而且有效。我只想把它放在这里以便更方便地找到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) => { };
    }
}

}