我正在创建类似于N=32 - The Truth about ViewModels... starring MvxView on the iPad - N+1 days of MvvmCross中使用的Stuart的AddressUIView的东西

在ctor中,我创建了一些UI并调用DelayBind,类似于Tutorial

public CustomerBannerView()
{
    BackgroundColor = UIColor.Green;

    var nameLabel = new UITextView();
    nameLabel.BackgroundColor = UIColor.Blue;
    nameLabel.Text = "Some Text";
    this.Add(nameLabel);

    var numberLabel = new UITextView();
    numberLabel.BackgroundColor = UIColor.Yellow;
    this.Add(numberLabel);

    this.DelayBind(
        () =>
            {
                var set = this.CreateBindingSet<CustomerBannerView, CustomerViewModel>();
                set.Bind(nameLabel).To(vm => vm.Name);
                set.Bind(numberLabel).To(vm => vm.Number);
                set.Apply();
            });

    this.SubviewsDoNotTranslateAutoresizingMaskIntoConstraints();

    this.AddConstraints(
        nameLabel.AtLeftOf(this, 10),
        nameLabel.AtTopOf(this, 10),
        numberLabel.AtRightOf(this, 10),
        numberLabel.AtTopOf(this, 10));

}


在本教程中,MvxView的DataContext属性绑定到外部/父视图模型的属性。在包括我的许多情况下,父属性将为Null,然后在后续数据中为有效实例。

这意味着在最初应用外部绑定时,它将MvxView的DataContext设置为Null。 DelayBind触发并输出以下警告


MvxBind:警告:23.37无法绑定:找不到源属性source属性:空对象[0:]上的名称
MvxBind:警告:23.37无法绑定:找不到源属性source属性:空对象上的数字


将父属性设置为有效实例后,绑定是否可以毫无问题地推送新值?


我是否以非预期的方式使用DelayBind和DataContext属性?
如果DataContext没有更改,是否值得考虑对MVVMCross进行更改以不调用DelayBind?即Null-> Null不变

最佳答案

您没有以意外的方式使用DelayBind。您应该考虑的是避免在值保持不变的情况下触发属性更改(我建议您使用Fody.PropertyChanged,它会自动进行处理)。
我不这么认为,因为它当前的工作方式为开发人员提供了更多的功能/自由。绑定负责根据DataContext更改保持UI更新,有关触发/不触发更改的所有逻辑均由DataContext本身负责。

10-08 17:14