我正在创建类似于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本身负责。