2013-06-27 3 views
7

Sto tentando di associare la proprietà text di TitleLabel su un UIButton utilizzando MvvmCross per Xamarin.iOS. Ecco quello che ho finora ...MvvmCross Bind to UIButton.TitleLabel.Text

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

Ho anche provato ...

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

Nessuno dei quali sembrano funzionare. Apprezzo l'aiuto!

+0

Possibile duplicato di [Fluent Bindings e UIButton titoli] (h ttps: //stackoverflow.com/questions/16751013/fluent-bindings-and-uibutton-titles) –

risposta

8

Per problemi di debug, consentendo traccia può aiutare - vedi MvvmCross Mvx.Trace usage

Per la rilegatura una proprietà su una preesistente subcontrol fissa di un subcontrol allora questo approccio dovrebbe funzionare:

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

Tuttavia, che ha vinto Continuare a lavorare se il controllo secondario cambia il suo controllo secondario in qualsiasi punto. Per questi casi, guarda attacchi personalizzati - per esempio vedere http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

Per il caso specifico di un UIButton, si può semplicemente legare il suo "titolo" - vedi Fluent Bindings and UIButton titles

+1

AwesomeSauce! Apprezzo molto l'aiuto! Ho anche bisogno di aggiornare le immagini sull'interfaccia utente. Sembra che Custom Binding sia la risposta a tutte le mie domande. Apprezzo il tuo feedback e la tua pazienza. Sto andando a tuffarmi nella piscina vincolante personalizzata. – blakeD

+3

L'etichetta su un pulsante può essere complicata: se si fa clic sul pulsante, l'etichetta associata viene reimpostata su quella impostata nell'XIB, provare invece questa sintassi: 'set.Bind (myButton). Per (" Titolo "). To (vm => vm.PropertyToBindTo);' La mia comprensione è che richiama un'associazione scritta appositamente per lo scenario UIButton.Title. – Adam

6

Per me UIButton legame TitleLabel non funziona. Sono venuto con personalizzato vincolante che funziona alla grande e flessibile:

Applicare vincolante:

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

codice vincolante:

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

Il modo più semplice associare un titolo UIButton:

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

Penso che questa sia la risposta migliore, poiché utilizza il raccoglitore personalizzato fornito da MvvmCross out of box e serve esattamente lo scopo di ciò che l'OP sta cercando di ottenere. –