8

我正在尝试使用 MvvmCross for Xamarin.iOS 绑定到 UIButton 上 TitleLabel 的文本属性。这是我到目前为止所拥有的...

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

我也试过...

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

两者似乎都不起作用。感谢您的帮助!

4

4 回答 4

15

绑定 UIButton 标题的最简单方法:

set.Bind(btnFoo).For("Title").To(vm => vm.BtnFooText);
于 2017-05-02T06:05:14.420 回答
9

对于调试问题,启用跟踪可能会有所帮助 - 请参阅MvvmCross Mvx.Trace 用法

为了在子控件的固定预先存在的子控件上绑定属性,那么这种方法应该有效:

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 的特定情况,您可以绑定它的“Title” - 请参阅Fluent Bindings 和 UIButton 标题

于 2013-06-27T06:07:24.333 回答
7

对我来说 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; }
    }
}
于 2015-06-20T18:50:40.717 回答
0

您可以使用:

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

添加以下使用:

using MvvmCross.Binding.iOS;
于 2020-07-31T14:27:24.040 回答