2013-06-27 66 views
7

我試圖綁定到使用MvvmCross爲Xamarin.iOS的UIButton上TitleLabel的文本屬性。這裏是我迄今爲止...MvvmCross綁定到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

[Fluent綁定和UIButton標題](h ttps://stackoverflow.com/questions/16751013/fluent-bindings-and-uibutton-titles) –

回答

8

對於調試問題,啓用跟蹤可能會幫助 - 見MvvmCross Mvx.Trace usage

爲了結合在一個子控件的一個固定的預先存在的子控件的屬性然後這種方法應該工作:

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!我很欣賞幫助!我還需要更新UI上的圖像。看起來自定義綁定是我所有問題的答案。感謝您的反饋和耐心。我打算進入自定義綁定池。 – blakeD

+3

按鈕上的標籤可能會非常棘手 - 如果您發現單擊此按鈕會導致綁定標籤重置爲XIB中設置的標籤,請嘗試使用以下語法: 'set.Bind(myButton).For(「Title 「).To(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

我認爲這是最好的答案,因爲它使用MvvmCross提供的自定義聯編程序,並且完全服務於OP嘗試實現的目的。 –