2013-06-27 13 views
7

मैं Xamarin.iOS के लिए MvvmCross का उपयोग करके UIButton पर TitleLabel की टेक्स्ट प्रॉपर्टी से जुड़ने का प्रयास कर रहा हूं। यहाँ मैं अब तक राशि है ...एमवीवीएमक्रॉस बाइंड को UIButton.TitleLabel.Text

set.Bind(btnFoo).For(btn => btn.TitleLabel.Text).To(vm => vm.BtnFooText); 

मैं भी कोशिश की है ...

set.Bind(btnFoo.TitleLabel).For(lbl => lbl.Text).To(vm => vm.BtnFooText); 

न तो जिनमें से काम करने के लिए लग रहे हैं। मैं मदद की सराहना करता हूं!

+0

[फ़्लुएंट बाइंडिंग्स और UIButton शीर्षक] के संभावित डुप्लिकेट (एच ttps: //stackoverflow.com/questions/16751013/fluent- बाइंडिंग-and-uibutton-titles) –

उत्तर

8

डिबगिंग समस्याओं के लिए, सक्षम करने का पता लगाने में मदद मिल सकती - देख MvvmCross Mvx.Trace usage

एक subcontrol की एक निश्चित पूर्व मौजूदा subcontrol पर एक संपत्ति बंधन के लिए तो इस दृष्टिकोण से काम करना चाहिए:

set.Bind(sub.subSub).For(c => c.PropertyName).To(vm => vm.Foo); 

हालांकि, उस जीता यदि उप नियंत्रण तब किसी भी बिंदु पर अपने उप नियंत्रण को बदलता है तो काम करना जारी रखेगा। उन मामलों के लिए, कस्टम बाइंडिंग को देखो - जैसे देखने http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

एक UIButton के विशेष मामले के लिए, आप केवल अपने "शीर्षक" बाध्य कर सकते हैं - Fluent Bindings and UIButton titles

+1

AwesomeSauce! मुझे यकीन है कि मदद की सराहना करते हैं! मुझे यूआई पर छवियों को अपडेट करने की भी आवश्यकता है। ऐसा लगता है कि कस्टम बाइंडिंग मेरे सभी सवालों का जवाब है। मैं आपकी प्रतिक्रिया और धैर्य की सराहना करता हूं। मैं कस्टम बाध्यकारी पूल में गोता लगाने के लिए बंद हूँ। – blakeD

+3

बटन पर लेबल मुश्किल हो सकता है - यदि आपको लगता है कि बटन पर क्लिक करने से बाध्य लेबल XIB में एक सेट पर रीसेट करने का कारण बनता है, तो इसके बजाय इस वाक्यविन्यास को आजमाएं: 'set.ind (myButton)। ("शीर्षक ")। (Vm => vm.PropertyToBindTo);' मेरी समझ यह है कि यह विशेष रूप से UIButton.Title परिदृश्य के लिए लिखित बाध्यकारी को आमंत्रित करता है। – Adam

6

मेरे लिए UIButton TitleLabel के लिए बाध्य काम नहीं करता है देखते हैं। मैं जो महान और जिस तरह से लचीला काम करता है कस्टम बंधन के साथ आया था:

बंधन लागू करें:

set.Bind(FinishedButton).For(UIButtonTextBinding.Property).To(v => v.FinishActionText); 

बाध्यकारी कोड:

public class UIButtonTextBinding : MvxTargetBinding 
{ 
    public const string Property = "ButtonText"; 

    protected UIButton View 
    { 
     get { return Target as UIButton; } 
    } 

    public UIButtonTextBinding(UIButton target) 
     : base(target) 
    { 
    } 

    public override void SetValue(object value) 
    { 
     var view = View; 
     if (view == null) 
      return; 

     var stringValue = value as string; 
     view.SetTitle(stringValue, UIControlState.Normal); 
    } 

    public override Type TargetType 
    { 
     get { return typeof(string); } 
    } 

    public override MvxBindingMode DefaultMode 
    { 
     get { return MvxBindingMode.OneWay; } 
    } 
} 
4

सबसे आसान तरीका है बाध्य करने के लिए एक UIButton शीर्षक:

set.Bind(btnFoo).For("Title").To(vm => vm.BtnFooText); 
+0

मुझे लगता है कि यह सबसे अच्छा जवाब है, क्योंकि यह बॉक्स के बाहर एमवीएमएमक्रॉस द्वारा प्रदान किए गए कस्टम बाइंडर का उपयोग करता है, और ओपी जो हासिल करने की कोशिश कर रहा है उसका बिल्कुल सही उद्देश्य प्रदान करता है। –

संबंधित मुद्दे