如何解决Xamarin Prism - 从标签页导航到新页面不会打开/推送新页面
最近我在我的 TabbedPage
应用程序中实现了一个 Xamarin.Forms
。但是,这给 Prism
带来了一些导航问题。我认为它应该是显而易见的,但我似乎无法弄清楚它是什么。
我使用 TabbedPage
作为我的起始页,其中包含多个选项卡。起始标签 HomePage
包含一个列表,点击这些列表项时,它将导航到另一个页面,该页面应作为新页面打开(因此覆盖整个标签页)。在实现 TabbedPage
之前这工作正常,但现在页面没有被打开,而它是 viewmodel
并且后端页面代码正在加载/初始化就好了,但页面本身(XAML
) 只是不会显示。
我感觉它正在打开,但出于同样的原因,它位于 TabbedPage
后面。
在阅读了几篇文章后,(其中一个是:Xamarin Prism Android won't lose TabbedPage or change NavigationPage),我已经尝试了以下没有任何效果:
- 在我的
useModalNavigation: false
方法中设置NavigateAsync
- 更改前往
MyTabbedPage/MYChildTabPage/TheGoToPage
的路线 - 尝试从
NavigationPage
XAML 中删除标签子页面
标签页:
<TabbedPage
x:Class="PCS2.APP.RoottabbedPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
xmlns:local="clr-namespace:PCS2.APP"
xmlns:prism="http://prismlibrary.com"
android:TabbedPage.ToolbarPlacement="Bottom"
prism:viewmodelLocator.Autowireviewmodel="True"
BarBackgroundColor="#F5F5F5"
NavigationPage.HasNavigationBar="False"
SelectedTabColor="{DynamicResource AccentColor}"
SelectedTabIndex="{Binding SelectedTab}"
UnselectedTabColor="#979797">
<TabbedPage.Children>
<NavigationPage Title="Mijn Taken">
<x:Arguments>
<local:HomePage />
</x:Arguments>
<NavigationPage.IconImageSource>
<FontimageSource
FontFamily="{StaticResource IconsFontFamily}"
Glyph="{x:Static local:FontawesomeSolidFont.Tasks}"
Size="25" />
</NavigationPage.IconImageSource>
</NavigationPage>
<NavigationPage Title="DKS">
<x:Arguments>
<local:DKSPage />
</x:Arguments>
<NavigationPage.IconImageSource>
<FontimageSource
FontFamily="{StaticResource IconsFontFamily}"
Glyph="{x:Static local:FontawesomeSolidFont.CalendarCheck}"
Size="25" />
</NavigationPage.IconImageSource>
</NavigationPage>
<!-- few other tabs left out for readability -->
</TabbedPage.Children>
</TabbedPage>
public class Roottabbedviewmodel : viewmodelBase
{
private readonly INavigationService _navigationService;
public Roottabbedviewmodel(INavigationService navigationService) : base(navigationService)
{
_navigationService = navigationService;
}
}
** viewmodelBase
具有以下实现:BindableBase,IInitialize,IInitializeAsync,INavigationAware,IDestructible
public class Homeviewmodel : viewmodelBase
{
private readonly INavigationService _navigationService;
private bool _showShimmer;
public Homeviewmodel(INavigationService navigationService)
: base(navigationService)
{
_navigationService = navigationService;
}
public override async Task InitializeAsync(INavigationParameters parameters)
{
try
{
// Loading data logic (which works),omitted for readability
}
catch (Exception ex)
{
ShowShimmer = false;
throw;
}
finally
{
ShowShimmer = false;
}
}
public override void OnNavigatedTo(INavigationParameters parameters)
{
// Some logic when navigating back to this page
}
private async Task LocationSelected(Projects location)
{
var parameters = new NavigationParameters
{
{ "clientId",location.ClientId },{ "projectId",location.ProjectId }
};
await _navigationService.NavigateAsync("LocationPage",parameters,useModalNavigation: false,false);
}
}
** LocationSelected 事件被触发,当它到达 NavigateAsync 时,我可以看到 LocationPage 的正确 viewmodel 正在被初始化。
LocationPage viewmodel:
public class Locationviewmodel : viewmodelBase
{
private readonly INavigationService _navigationService;
public Locationviewmodel(INavigationService navigationService)
: base(navigationService)
{
_navigationService = navigationService;
}
public override async Task InitializeAsync(INavigationParameters parameters)
{
try
{
// Initialize data logic - omitted for readability
}
catch (Exception)
{
throw;
}
finally
{
}
}
}
InitializeAsync
的 Locationviewmodel
被命中并没有错误地执行,但是在完成之后,XAML 很简单,没有被推到顶部(页面不可见)。任何想法如何让它发挥作用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。