2013-06-27 8 views
7

Próbuję powiązać właściwość text TitleLabel na UIButtonie przy użyciu MvvmCross dla Xamarin.iOS. Oto co mam tak daleko ...MvvmCross Bind to UIButton.TitleLabel.Text

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

Próbowałem zostały również ...

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

z których żadna nie wydają się działać. Doceniam pomoc!

+0

Prawdopodobny duplikat tytułów [Fluent Bindings i UIButton] (h ttps: //stackoverflow.com/questions/16751013/fluent-bindings-and-uibutton-titles) –

Odpowiedz

8

przypadku problemów debugowania, umożliwiając ślad może pomóc - patrz MvvmCross Mvx.Trace usage

oprawy nieruchomości na stałej wcześniej istniejącej subcontrol z subcontrol wtedy to podejście powinno działać:

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

Jednakże, który wygrał Kontynuuje pracę, jeśli podrzędne sterowanie zmieni w dowolnym momencie swoją pod-kontrolę. Dla tych przypadków, spojrzeć na niestandardowych wiązań - patrz np http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

dla konkretnego przypadku uibutton, można po prostu powiązać swoje „Title” - patrz Fluent Bindings and UIButton titles

+1

AwesomeSauce! Z pewnością doceniam pomoc! Potrzebuję również aktualizacji obrazów w interfejsie użytkownika. Wygląda na to, że niestandardowe powiązanie jest odpowiedzią na wszystkie moje pytania. Doceniam twoją opinię i cierpliwość. Mam zamiar zagłębić się w niestandardową pulę powiązań. – blakeD

+3

Etykieta na przycisku może być trudna - jeśli kliknięcie przycisku powoduje przywrócenie etykiety powiązanej z ustawionym w XIB, wypróbuj tę składnię: 'set.Bind (myButton) .Dla (" Tytuł ") .To (vm => vm.PropertyToBindTo);' Rozumiem, że wywołuje on powiązanie napisane specjalnie dla scenariusza UIButton.Tytuł. – Adam

6

dla mnie UIButton wiązanie z TitleLabel nie działa. Wpadłem zwyczaj wiązania, które działa świetnie i sposób elastyczny:

Zastosuj wiązania:

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

kod Oprawa:

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

Najłatwiej powiązać tytuł UIButton:

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

Myślę, że jest to najlepsza odpowiedź, ponieważ wykorzystuje ona niestandardowy segregator dostarczony przez MvvmCross z pudełka i służy dokładnie temu celowi, który OP stara się osiągnąć. –