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>
将确保FirstViewModel
的Init
火灾。
如何从HomeViewModel调用ShowViewModel在HomeViewModel的Init方法中? –
否 - 在'Init'期间,您不应该离开ViewModel。如果“HomeViewModel”是包含“FirstViewModel”链接到的片段的活动的ViewModel,请导航到“FirstViewModel”,而不是_“HomeViewModel”。确保Android通过使用[this](http://stackoverflow.com/questions/40287483/mvvmcross-fragments-resolving)示例中的'MvxFragment'属性加载片段的活动。 –
你可以给一个示例代码? –