这是关于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));
}
}
我在上面的代码中做错了什么,为什么不解雇。
答案 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) => { };
}
}
}