Xamarin.forms 如何使用Prism在选项卡页的第二个/第三个选项卡上触发OnNavigatedTo?
我用的是棱镜。我的选项卡式页面中有4个选项卡:主页(静态否,需要导航到所需位置)、活动(需要导航到所需位置)、备注(需要导航到所需位置)和更多页面(需要导航到所需位置) 如何为第二个和第三个选项卡触发此OnNavigatedTo?我在没有选项卡的情况下测试了它,即使用NavigationPage/ActivityList和OnNavigatedTo正常工作 为选项卡式页面的代码隐藏找到此代码,但不确定它的作用 CustomTabbedPage.xaml:Xamarin.forms 如何使用Prism在选项卡页的第二个/第三个选项卡上触发OnNavigatedTo?,xamarin.forms,prism,Xamarin.forms,Prism,我用的是棱镜。我的选项卡式页面中有4个选项卡:主页(静态否,需要导航到所需位置)、活动(需要导航到所需位置)、备注(需要导航到所需位置)和更多页面(需要导航到所需位置) 如何为第二个和第三个选项卡触发此OnNavigatedTo?我在没有选项卡的情况下测试了它,即使用NavigationPage/ActivityList和OnNavigatedTo正常工作 为选项卡式页面的代码隐藏找到此代码,但不确定它的作用 CustomTabbedPage.xaml: <TabbedPage.Child
<TabbedPage.Children>
<NavigationPage Title="Home" IconImageSource="home.png">
<x:Arguments> <local:HomePage/> </x:Arguments>
</NavigationPage>
<NavigationPage Title="Activity" IconImageSource="activity.png">
<x:Arguments> <local:ActivityListPage/> </x:Arguments>
</NavigationPage>
<NavigationPage Title="Note" IconImageSource="note.png">
<x:Arguments> <local:ActivityListPage/> </x:Arguments>
</NavigationPage>
<NavigationPage Title="More" IconImageSource="more.png">
<x:Arguments> <local:MorePage/> </x:Arguments>
</NavigationPage>
</TabbedPage.Children>
public void OnNavigatedTo(INavigationParameters parameters)
{
if (parameters.GetNavigationMode() == NavigationMode.New)
{
if (Children.Count == 1)
{
return;
}
for (var pageIndex = 1; pageIndex < Children.Count; pageIndex++)
{
var page = Children[pageIndex];
(page?.BindingContext as INavigationAware)?.OnNavigatedTo(parameters);
}
}
}
答案很简单,您没有导航到未显示的选项卡 导航到选项卡页面时,选项卡页面的ViewModel及其所有子项将触发OnInitialized。在这里,您可以访问
INavigationParameters
,以收集可能需要在选项卡之间共享的任何上下文
假设您有3个选项卡,我们将它们称为TabA、TabB和TabC,并且假设您选择TabB作为将向用户显示的选项卡,那么TabbedPage和TabB是导航到的两个页面。因此,只有他们的ViewModel具有OnNavigatedTo调用。答案很简单,您没有导航到未导航到的选项卡没有显示 导航到选项卡页面时,选项卡页面的ViewModel及其所有子项将触发OnInitialized。在这里,您可以访问
INavigationParameters
,以收集可能需要在选项卡之间共享的任何上下文
假设您有3个选项卡,我们将它们称为TabA、TabB和TabC,并假设您选择TabB作为将向用户显示的选项卡,那么TabbedPage和TabB是导航到的两个页面。因此,只有他们的ViewModel将具有OnNavigatedTo调用。有in-prism的概念
因此,您可以将OnNavigatedTo代码移动到RaiseActiveChanged事件中。有in-prism的概念
因此,您可以将OnNavigatedTo代码移动到RaiseActiveChanged事件中。您是否继承了INavigatedAware?是的,我在本页中继承了。您可以尝试更新prism版本,它似乎修复了NavigationPage中的导航,请参阅您是否继承了INavigatedAware?是的,我在本页中继承了。您可以尝试更新prism版本,它似乎修复了NavigationPage中的导航,请参阅
protected override async void OnInitialized()
{
InitializeComponent();
if (!string.IsNullOrEmpty(Preferences.Get(Constant.Setting_AccessToken, "")))
{
var result = await NavigationService.NavigateAsync("CustomTabbedPage?selectedTab=HomePage");
}
else if (string.IsNullOrEmpty(Preferences.Get(Constant.Setting_UserEmail, "")) &&
string.IsNullOrEmpty(Preferences.Get(Constant.Setting_Password, "")))
{
var result = await NavigationService.NavigateAsync("/LoginPage");
}
}
public class TabItemViewModel : BindableBase, IActiveAware
{
// NOTE: Prism.Forms only sets IsActive, and does not do anything with the event.
public event EventHandler IsActiveChanged;
private bool _isActive;
public bool IsActive
{
get { return _isActive; }
set { SetProperty(ref _isActive, value, RaiseIsActiveChanged); }
}
protected virtual void RaiseIsActiveChanged()
{
IsActiveChanged?.Invoke(this, EventArgs.Empty);
if (IsActive)
{
// Do stuff here when tab is selected
}
}
}