2012-10-18 50 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) => { }; 
    } 
} 

}