Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 最后调用了mvvmcross ViewModel的init()_Ios_Xamarin.ios_Xamarin_Mvvmcross - Fatal编程技术网

Ios 最后调用了mvvmcross ViewModel的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

我有一个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。
我知道CIR,但是如何解决这个问题呢?

您可以做很多事情来更改绑定,使其在异步场景中工作,包括使用可观察的集合

但是,当前设置中最简单的方法可能只是更改ViewModel中的整个CustomButtons列表,例如:

   var customButtons = new List<CustomButton>() {
      new CustomButton(this, "1"),
      new CustomButton(this, "2")
   };
   CustomButtons = customButtons;
   RaisePropertyChanged(() => CustomButtons);
在这个一次性场景中,这个实现应该适合您。对于更高级的动态场景,可能也值得研究INotifyCollectionChanged实现