我正在创建类似于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属性绑定到外部/父ViewModel上的Property。在包括我在内的许多情况下,Parent Property将为Null,然后在后续数据中为有效实例。
这意味着当最初应用外部绑定时,它会将MvxView的DataContext设置为Null。 DelayBind触发并输出以下警告
MvxBind:警告:23.37无法绑定:找不到源属性源属性:null-object上的名称[0:] MvxBind:警告:23.37无法绑定:找不到源属性源属性:null-object上的数字
一旦将Parent Property设置为有效的实例,绑定确实会推送新值,没有问题吗?
答案 0 :(得分:1)
您没有以意想不到的方式使用DelayBind。您应该考虑的是避免在值保持不变时触发属性更改(我建议您使用Fody.PropertyChanged,这将自动处理)。
我不这么认为,因为它目前的工作方式为开发人员提供了更多的权力/自由。绑定负责根据DataContext更改保持UI更新,所有关于触发/不触发更改的逻辑都是DataContext本身的责任。