我有一个DetailViewModel,它有几个自定义按钮并在Init()中初始化它们。
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()。 我知道CIRS,但如何解决这个问题呢?
答案 0 :(得分:0)
你可以做很多事情来改变你的绑定,使它在这个async
场景中起作用 - 包括使用可观察的集合。
但是,您当前设置中最简单的路线可能只是更改ViewModel中的整个CustomButtons
列表 - 例如类似的东西:
var customButtons = new List<CustomButton>() {
new CustomButton(this, "1"),
new CustomButton(this, "2")
};
CustomButtons = customButtons;
RaisePropertyChanged(() => CustomButtons);
在这种“一次性”场景中,此实现应该适合您。对于更高级的动态方案,也可能值得查看INotifyCollectionChanged
实现。