2013-06-06 4 views
7

に結合GestureRecognized。どのように私はそれを(それはタップアクション)そのようなエレガントな方法でバインドする必要がありますか?MvvmCrossは:</p> <pre><code>var set = this.CreateBindingSet<... set.Bind(button).To(x => x.Go); </code></pre> <p>が、何例えば、UITapGestureRecognizerについてです:直接このようなボタンのアクションをバインドするためにそのような能力があるのViewModelアクション

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

答えて

15

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

何かのように

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

私はそれがうまくいくと思う - しかし、ここでライブコーディングです!


アドバンス>あなたがしたい場合、あなたはまたTapBehaviourのデフォルトの結合特性を登録することにより、For(tap => tap.Command)部分の必要性を取り除くことができ - このオーバーライドSetup.FillBindingNamesと利用を行うには:この後

registry.AddOrOverwrite(typeof (TapBehaviour), "Command"); 

を、その後、結合は次のようになります。ただ、REFEため

set.Bind(label.Tap()).To(x => x.Go); 

+0

はあなたにたくさんありがとうございました!小さなミスタイプにもかかわらず、すべてが魅力のように機能します! – Agat

+0

答えを編集して間違いを修正してください。ありがとう。 – Stuart

+0

が更新されました。ただし、(スタックオーバーフローの制限のために)4文字しか変更することはできませんでした。彼は – Agat

13

それで。 MvvMcrossの新しいバージョンを使用すると、タップジェスチャーをバインドするために使用することができます箱から出して(MvxTapGestureRecognizerBehaviourを参照)UIViewのメソッドの拡張機能が含まれています

using Cirrious.MvvmCross.Binding.Touch.Views.Gestures; 

// in this case "Photo" is an MvxImageView 
set.Bind(Photo.Tap()).For(tap => tap.Command).To("OpenImage"); 
+1

参考になりました。私はスワイプのためのジェスチャー認識機能を追加しました:https://github.com/MvvmCross/MvvmCross/pull/1266 – SimonSimCity

+0

これは驚くべきものです。これらの拡張機能について私がどのように知っていたのか分かりません。 UIStackviewのタップにバインドする作業がとても楽になりました。 – NovaJoe

関連する問題

 関連する問題