使用Nib创建的MvxTableViewCell时,我应该在哪里放置初始化/绑定逻辑?

时间:2018-11-09 05:36:54

标签: xamarin mvvmcross mvxbind

我创建了自定义MvxTableViewCell,并将所有设计布局放置在.xib文件中:

public partial class FxTransactionCell: MvxTableViewCell
{
    public static readonly NSString Key = new NSString("FxTransactionCell");
    public static readonly UINib Nib = UINib.FromName(Key, NSBundle.MainBundle);

    static FxTransactionCell()
    {
    }

    protected FxTransactionCell(IntPtr handle): base(handle)
    {
        // Note: this .ctor should not contain any initialization logic.
    }
}

我见过的所有示例都将初始化/绑定逻辑放入(IntPtr)构造函数中,但请注意VS在那里放置了注释。我认为此构造函数无法保存任何初始化逻辑,因为尚未创建我的自定义UI元素,并且我的所有UILabel,UIButton(在.xib文件中的布局)在此构造函数内均为null。 那么,我应该在哪里放置我的init / bindings逻辑呢?

1 个答案:

答案 0 :(得分:0)

在您的公共构造函数中,应放置init / binding逻辑。 请注意,您必须使用DelayBind(...)MvxTableViewCell

内部进行绑定
public FxTransactionCell()
{
    // Init views if you need to

    // Create the bindings
    this.DelayBind(this.CreateBindings);
}

public FxTransactionCell(IntPtr handle) : base(handle)
{
    // Some people repeat the same logic here just in case the above ctor does not get called, ignoring the note from VS but I don't think it's necessary.
}

private void CreateBindings()
{
    var set = this.CreateBindingSet<FxTransactionCell, FxTransactionItemViewModel>();
    set.Bind(this.MyLabel).To(vm => vm.MyStringProperty);
    set.Apply();
}

HIH