Где я должен разместить логику инициализации / привязки при использовании MvxTableViewCell, созданного из Nib? - PullRequest
0 голосов
/ 09 ноября 2018

Я создал пользовательский 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.Я думаю, что этот конструктор не может содержать никакой логики инициализации, потому что мои пользовательские элементы пользовательского интерфейса еще не созданы, и все мои UILabels, UIButtons (которые расположены в файле .xib) внутри этого конструктора являются нулевыми.Итак, где я должен разместить свою логику init / bindings?

1 Ответ

0 голосов
/ 09 ноября 2018

В вашем публичном конструкторе вы должны поместить свою логику инициализации / привязки. Обратите внимание, что вы должны использовать 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();
}

Е.И.В.

...