我正在创建类似于Stuart在N=32 - The Truth about ViewModels... starring MvxView on the iPad - N+1 days of MvvmCross中使用的AddressUIView。
在构造函数中,我创建了一些UI并调用了DelayBind,类似于教程中的操作。
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属性绑定到外部/父ViewModel上的一个属性。在包括我的许多情况下,父属性将为Null,然后在随后的数据中为有效实例。
这意味着当外部绑定最初应用时,它将MvxView的DataContext设置为Null。DelayBind触发并输出以下警告:
MvxBind:Warning: 23.37 Unable to bind: source property source not found Property:Name on null-object [0:] MvxBind:Warning: 23.37 Unable to bind: source property source not found Property:Number on null-object
一旦父属性设置为有效实例,绑定确实可以顺利地推送新值吗?
以下是需要回答的问题:
1. 我是否以不符合预期方式使用DelayBind和DataContext属性? 2. 是否值得考虑对MVVMCross进行更改,以便在DataContext未更改时不调用DelayBind?即Null-> Null不是更改。
CustomerViewModel
的代码吗?问题的一部分可能出在那里;Name
似乎对于绑定不可见。 - cdbitesky