MvvmCross начальный IMvxViewModel ViewAppeared не вызывается, когда в MvxTabbbedPage на Android - PullRequest
0 голосов
/ 08 февраля 2019

У нас есть MvxTabbedPage и дочерние MvxContentPage s в нашем проекте Xamarin.Forms.

В Android я обнаружил, что переопределение ViewAppeared на моей первой дочерней странице не вызываетсяв первый раз отображается MvxTabbedPage.

При переключении вкладок он впоследствии вызывается правильно.

Я инициализирую PageModels в ViewAppearing для MvxTabbedPagePageModel как показано ниже:

public override async void ViewAppearing()
{
    await ShowInitialViewModels();
    base.ViewAppearing();
}

private bool viewModelsInitialised = false;
private async Task ShowInitialViewModels()
{
    if (!viewModelsInitialised)
    {
        await _BusyManager.SetBusy();
        var tasks = new List<Task>();
        tasks.Add(_MvxNavigationService.Navigate<HomePageModel>());
        tasks.Add(_MvxNavigationService.Navigate<MyBenefitsPageModel>());
        tasks.Add(_MvxNavigationService.Navigate<ClaimsPageModel>());
        tasks.Add(_MvxNavigationService.Navigate<ContactUsPageModel>());
        tasks.Add(_MvxNavigationService.Navigate<SettingsPageModel>());
        await Task.WhenAll(tasks);
        viewModelsInitialised = true;
        await _BusyManager.SetUnBusy();
    }
}

Видели ли другие это поведение, и / или я должен делать что-то по-другому?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Проверьте проект Playground mvvmcross.Вы должны управлять инициализацией своих вкладок отдельно в модели представления и коде представления XF позади.

public class YourTabsViewModel : MvxViewModel
{
    private readonly IMvxNavigationService _navigationService;

    public YourTabsViewModel(IMvxNavigationService navigationService)
    {
        _navigationService = navigationService;

        ShowInitialViewModelsCommand = new MvxAsyncCommand(ShowInitialViewModels);
    }

    public IMvxAsyncCommand ShowInitialViewModelsCommand { get; private set; }

    private async Task ShowInitialViewModels()
    {
        var tasks = new List<Task>
        {
            tasks.Add(_navigationService.Navigate<HomePageModel>();
            tasks.Add(_navigationService.Navigate<MyBenefitsPageModel>());
            tasks.Add(_navigationService.Navigate<ClaimsPageModel>());
            tasks.Add(_navigationService.Navigate<ContactUsPageModel>());
            tasks.Add(_navigationService.Navigate<SettingsPageModel>());
        }

        await Task.WhenAll(tasks);
    }
}

А затем в коде позади представления XF

[MvxTabbedPagePresentation(TabbedPosition.Root, NoHistory = true)]
public partial class YourTabsPage : MvxTabbedPage<YourTabsViewModel>
{
    public YourTabsPage()
    {
        InitializeComponent();
    }

    private bool _firstTime = true;

    protected override void OnAppearing()
    {
        base.OnAppearing();

        if (_firstTime)
        {
            ViewModel.ShowInitialViewModelsCommand.ExecuteAsync(null);

            _firstTime = false;
        }
    }
}
0 голосов
/ 08 февраля 2019

Похоже, что это ошибка форм:

https://github.com/xamarin/Xamarin.Forms/issues/3855

, на которую ссылается эта проблема MvvmCross

https://github.com/MvvmCross/MvvmCross/issues/2823

(спасибоПедро, который указал мне в этом направлении на Slack:)

...