Prism和Xamarin.Forms:IApplicationLifecycle

时间:2017-10-05 14:57:24

标签: xamarin prism

我有一个继承自BindableBase并实现IApplicationLifecycle的viewmodel。但是,iOS和Android都不会调用IApplicationLifecycle.OnResume()和IApplicationLifecycle.OnSleep()。

您如何使用IApplicationLifecycle?我似乎无法找到任何文件。提前谢谢!

在我的App.xaml.cs中,我有:

NavigationService.NavigateAsync("NavigationPage/MainPage");

和我的MainPage.xaml看起来像这样:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:PrismApp.Views;assembly=PrismApp"
         xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
         prism:ViewModelLocator.AutowireViewModel="True"
         x:Class="PrismApp.Views.MainPage"
         Title="MainPage">

<TabbedPage.Children>
    <local:APage Icon="tabicon_mapspage.png" />
    <local:BPage Icon="tabicon_profilepage.png" />
    <local:CPage Icon="tabicon_statuspage.png" />
</TabbedPage.Children>

最后,我的MainPageViewModel如下所示:

public class MainPageViewModel : BindableBase, IApplicationLifecycle
{
    private string _title;
    public string Title
    {
        get { return _title; }
        set { SetProperty(ref _title, value); }
    }
    public void OnResume()
    {
        var debug = 42;
    }

    public void OnSleep()
    {
        var debug = 42;
    }
}

我在这里放了一个最小的项目:https://github.com/RandomStuffAndCode/PrismApp

1 个答案:

答案 0 :(得分:1)

由于您位于TabbedPage中,因此仅在TabbedPage.CurrentPage(SelectedTab)上调用IApplicationAware方法,因为这是当前活动页面。

顺便说一下,您可以通过覆盖app类中的OnResume和OnSleep方法来实现目标,从而改变这种行为。使用现有代码作为指南:https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Forms/PrismApplicationBase.cs#L171