我有一个继承自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
答案 0 :(得分:1)
由于您位于TabbedPage中,因此仅在TabbedPage.CurrentPage(SelectedTab)上调用IApplicationAware方法,因为这是当前活动页面。
顺便说一下,您可以通过覆盖app类中的OnResume和OnSleep方法来实现目标,从而改变这种行为。使用现有代码作为指南:https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Forms/PrismApplicationBase.cs#L171