Ios 最后调用了mvvmcross ViewModel的init()
我有一个DetailViewModel,它有几个自定义按钮,并在Init中初始化它们Ios 最后调用了mvvmcross ViewModel的init(),ios,xamarin.ios,xamarin,mvvmcross,Ios,Xamarin.ios,Xamarin,Mvvmcross,我有一个DetailViewModel,它有几个自定义按钮,并在Init中初始化它们 public class DetailViewModel{ ... public async void Init(DetailParameter params){ ... CustomButtons.Add(new CustomButton(this, "1")); //3 CustomButtons.Add(new CustomB
public class DetailViewModel{
...
public async void Init(DetailParameter params){
...
CustomButtons.Add(new CustomButton(this, "1")); //3
CustomButtons.Add(new CustomButton(this, "2"));
...
}
}
然后在细节视图中,我有几个按钮,并将它们与DetailViewModel中的自定义按钮绑定
public partial class DetailView{
private List<CustomButton> m_customButtons;
public List<CustomButton> CutomButtons{
get { return m_customButtons; }
set { m_customButtons = value; //2
foreach(CustomButton button in m_customButtons){
UIButton myButton = new UIButton ();
Add(myButton);
}
}
}
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
var set = this.CreateBindingSet<DetailView, DetailViewModel>();
set.Bind (this).For (v=>v.CustomButtons).To (vm=>vm.CustomButtons);//1
set.Apply ();
}
}
问题是ViewModel的Init最终被调用了。
所以总是m_customButtons设置为0计数,然后调用ViewModel的Init。
我知道CIR,但是如何解决这个问题呢?您可以做很多事情来更改绑定,使其在异步场景中工作,包括使用可观察的集合 但是,当前设置中最简单的方法可能只是更改ViewModel中的整个CustomButtons列表,例如:
var customButtons = new List<CustomButton>() {
new CustomButton(this, "1"),
new CustomButton(this, "2")
};
CustomButtons = customButtons;
RaisePropertyChanged(() => CustomButtons);
在这个一次性场景中,这个实现应该适合您。对于更高级的动态场景,可能也值得研究INotifyCollectionChanged实现