7

次のように、ボタン アクションを直接バインドする機能があります。

var set = this.CreateBindingSet<...
set.Bind(button).To(x => x.Go);

しかし、たとえば UITapGestureRecognizer についてはどうですか。このようなエレガントな方法でバインドするにはどうすればよいですか (タップ アクションです)。

ありがとうございました!

4

2 に答える 2

20

参考までに。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");
于 2015-11-01T12:40:28.243 に答える
17

必要に応じて、これを自分で追加できます。

たとえば、次のようなもの

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

于 2013-06-06T14:28:05.807 に答える