I am attempting to bind to the text property of TitleLabel on a UIButton using MvvmCross for Xamarin.iOS. Here's what I have so far...
set.Bind(btnFoo).For(btn => btn.TitleLabel.Text).To(vm => vm.BtnFooText);
I've also tried...
set.Bind(btnFoo.TitleLabel).For(lbl => lbl.Text).To(vm => vm.BtnFooText);
Neither of which seem to work. I appreciate the help!
The easiest way to bind a UIButton Title:
set.Bind(btnFoo).For("Title").To(vm => vm.BtnFooText);
For debugging issues, enabling trace may help - see MvvmCross Mvx.Trace usage
For binding a property on a fixed pre-existing subcontrol of a subcontrol then this approach should work:
set.Bind(sub.subSub).For(c => c.PropertyName).To(vm => vm.Foo);
However, that won't continue to work if the sub control then changes its sub control at any point. For those cases, look at custom bindings - eg see http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html
For the specific case of a uibutton, you can just bind its "Title" - see Fluent Bindings and UIButton titles
For me UIButton binding to TitleLabel doesn't work. I came up with custom binding which works great and way flexible:
Apply binding:
set.Bind(FinishedButton).For(UIButtonTextBinding.Property).To(v => v.FinishActionText);
Binding code:
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; }
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With