2013-06-27 64 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尝试实现的目的。 –