2012-10-18 37 views
2

这是关于在stackoverflow上的以下问题。我正在尝试为这里描述的按钮提供触摸命令,但没有任何反应。 mvvmcross touch command binding in androidMVVMCross按钮命令绑定没有触发

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

我在做什么错在上面的代码,为什么它不会触发。

回答

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上的问题错误:)

+0

由于斯图尔特,就像一个魅力而这正是我一直在寻找 – tribal

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

}