3

これは、stackoverflow に関する次の質問に関するものです。here で説明されているように、ボタンのタッチコマンドを使用しようとしていますが、何も起こりません。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

現在、拘束力はありませんTouch

public event EventHandler<View.TouchEventArgs> Touch

追加したい場合は、StackOverflowで新しいバインディングを設定する方法を検索してください。たとえば、Androidのmvvmcrosstouchコマンドバインディングの回答で完全な例が得られます。


ただし...ほとんどのボタンを押すと、おそらく次のように使用できます。

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の問題に関するバグをログに記録してください:)

于 2012-10-18T09:29:51.743 に答える
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) => { };
    }
}

}

于 2013-09-18T02:41:05.023 に答える