Метод 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>());
}
}
}
}
Я попробовал то же самое с Activity, для активности checkview он работает, но не для Fragment.
1 ответ
ViewModel
Жизненные циклы не выполняются, потому что вы не загружаете их с помощью MvvmCross, вы просто создаете их, как обычные классы.NET. Только конструктор будет работать на самом деле. Если ты хочешь Init
чтобы выполнить, вам нужно загрузить ViewModel с MvvmCross, что обычно делается путем перехода к нему с помощью ShowViewModel<YourViewModel>
,
Фрагменты, содержащиеся в действиях в Android, не означают, что ваши ViewModels должны быть детьми вашего HomeViewModel
, призвание ShowViewModel<FirstViewModel>
будет гарантировать, что FirstViewModel
"s Init
пожары.