2013-06-06 6 views
7

के लिए बाध्य GestureRecognized ऐसे इस तरह सीधे बटन कार्रवाई के लिए बाध्य करने की क्षमता है:MvvmCross: ViewModel कार्रवाई

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

लेकिन क्या, UITapGestureRecognizer के बारे में है, उदाहरण के लिए। मुझे इस तरह के सुरुचिपूर्ण तरीके से इसे कैसे बांधना चाहिए (यह टैप एक्शन है)?

धन्यवाद!

उत्तर

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

, तो बंधन हो सकता है:

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

+0

तुम्हें बहुत धन्यवाद: MvvMcross का नया संस्करण एक UIView विधि विस्तार (MvxTapGestureRecognizerBehaviour देखें) बॉक्स है कि आप टैप जेस्चर बाध्य करने के लिए उपयोग कर सकते हैं में से शामिल है! छोटे mistypings के बावजूद, सब कुछ एक आकर्षण की तरह काम करता है! – Agat

+0

कृपया गलतियों को सही करने के लिए उत्तर संपादित करें। धन्यवाद। – Stuart

+0

अपडेट किया गया। हालांकि यह केवल 4 वर्णों को बदलने के लिए एक चाल थी (स्टैक ओवरफ्लो प्रतिबंधों के कारण)। वह – Agat

13
बस refe के लिए

Rence।

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