Init方法在片段视图模型中没有调用

问题描述:

我有一个片段,在init方法中我试图展示一些数据,但它没有得到。Init方法在片段视图模型中没有调用

namespace MoneyCare.Core.ViewModels 
    { 
     public class HomeViewModel : MvxViewModel 
     { 

      public FirstViewModel First { get; set; } 
      public SecondViewModel Second { get; set; } 
      public ThirdViewModel Third { get; set; } 

      public HomeViewModel() 
      { 
       First = new FirstViewModel(); 
       Second = new SecondViewModel(); 
       Third = new ThirdViewModel(); 
      } 

     } 
    } 

我在我的项目中有三个片段。

namespace MoneyCare.Core.ViewModels 
    { 
     public class FirstViewModel: MvxViewModel 
     { 
      Friend _friend; 


      public List<Friend> AllFriends { get; set; } 

      public string FriendUserName 
      { 
       get { return _friend.FriendUserName; } 
       set 
       { 
        _friend.FriendUserName = value; 
        RaisePropertyChanged(() => FriendUserName); 
       } 
      } 


      public void Init() 
      { 
       Task<List<Friend>> result = Mvx.Resolve<Repository>().getFriendsList(); 
       result.Wait(); 
       AllFriends = result.Result; 
      } 

      public ICommand check 
      { 
       get 
       { 
        return new MvxCommand(() => 
        { 

         //Task<List<Friend>> result = Mvx.Resolve<Repository>().getFriendsList(); 
         //result.Wait(); 
         //AllFriends = result.Result; 
         ShowViewModel<CheckViewModel>(); 


        }); 
       } 
      } 


      //Opens Add Friends Activity 
      public ICommand OpenAddFriend 
      { 
       get 
       { 

        return new MvxCommand(() => ShowViewModel<AddFriendViewModel>()); 
       } 
      } 


     } 
    } 

我想同样的事情与活动,对于checkview活动是工作而不是片段。

ViewModel的生命周期不被执行,因为你不是装载他们MvvmCross,你只是构建它们当作普通的.NET类。只有构造函数会实际运行。如果您想要执行Init,则需要使用MvvmCross加载ViewModel,通常通过导航到ShowViewModel<YourViewModel>来完成此操作。

Android中的活动包含的碎片并不意味着您的ViewModel需要成为您的HomeViewModel的子项。调用ShowViewModel<FirstViewModel>将确保FirstViewModelInit火灾。

+0

如何从HomeViewModel调用ShowViewModel 在HomeViewModel的Init方法中? –

+1

否 - 在'Init'期间,您不应该离开ViewModel。如果“HomeViewModel”是包含“FirstViewModel”链接到的片段的活动的ViewModel,请导航到“FirstViewModel”,而不是_“HomeViewModel”。确保Android通过使用[this](http://stackoverflow.com/questions/40287483/mvvmcross-fragments-resolving)示例中的'MvxFragment'属性加载片段的活动。 –

+0

你可以给一个示例代码? –