次のように、ボタン アクションを直接バインドする機能があります。
var set = this.CreateBindingSet<...
set.Bind(button).To(x => x.Go);
しかし、たとえば UITapGestureRecognizer についてはどうですか。このようなエレガントな方法でバインドするにはどうすればよいですか (タップ アクションです)。
ありがとうございました!
次のように、ボタン アクションを直接バインドする機能があります。
var set = this.CreateBindingSet<...
set.Bind(button).To(x => x.Go);
しかし、たとえば UITapGestureRecognizer についてはどうですか。このようなエレガントな方法でバインドするにはどうすればよいですか (タップ アクションです)。
ありがとうございました!
参考までに。MvvMcross の新しいバージョンには、タップ ジェスチャをバインドするために使用できる UIView メソッド拡張 (MvxTapGestureRecognizerBehaviour を参照) が含まれています。
using Cirrious.MvvmCross.Binding.Touch.Views.Gestures;
// in this case "Photo" is an MvxImageView
set.Bind(Photo.Tap()).For(tap => tap.Command).To("OpenImage");
必要に応じて、これを自分で追加できます。
たとえば、次のようなもの
public class TapBehaviour
{
public ICommand Command { get;set; }
public TapBehaviour(UIView view)
{
var tap = new UITapGestureRecognizer(() =>
{
var command = Command;
if (command != null)
command.Execute(null);
});
view.AddGestureRecognizer(tap);
}
}
public static class BehaviourExtensions
{
public static TapBehaviour Tap(this UIView view)
{
return new TapBehaviour(view);
}
}
// binding
set.Bind(label.Tap()).For(tap => tap.Command).To(x => x.Go);
それはうまくいくと思います-しかし、これはここでライブコーディングです!
For(tap => tap.Command)
Advanced>必要に応じて、 TapBehaviourのデフォルトのバインディングプロパティを登録することで、パーツの必要性を取り除くこともできます-これをオーバーライドSetup.FillBindingNames
して使用するには:
registry.AddOrOverwrite(typeof (TapBehaviour), "Command");
この後、バインディングは次のようになります。
set.Bind(label.Tap()).To(x => x.Go);