2 回答
TA贡献1789条经验 获得超10个赞
我不知道是否有人仍然对此感兴趣,但我遇到了同样的问题并弄清楚了发生了什么。
我发现的所有代码示例都注册了一个 NavigationPage,如下所示:
containerRegistry.RegisterForNavigation<NavigationPage>("Navigation");
为了能够在应用启动时做这样的事情:
NavigationService.NavigateAsync($"Main/Navigation/Home");
然而,问题似乎是当这个 NavigationPage 在没有特定的 ViewModel 被实例化时,“INavigationAware”事件以某种方式传播到 MasterDetailPage 的 ViewModel 导致该事件被调用两次。
我通过使用 ViewModel 注册 NavigationPage for Navigation 来修复它,如下所示:
containerRegistry.RegisterForNavigation<NavigationPage, NavigationPageViewModel>("Navigation");
ViewModel 本身没什么特别的:
using Prism.Commands;
using Prism.Mvvm;
using Prism.Navigation;
using System;
using System.Collections.Generic;
using System.Linq;
using Unity.Attributes;
namespace SocialRecipe.ViewModels
{
public class NavigationPageViewModel : ViewModelBase
{
public NavigationPageViewModel()
{
}
public override void OnNavigatedFrom(INavigationParameters parameters)
{
}
public override void OnNavigatedTo(INavigationParameters parameters)
{
}
public override void OnNavigatingTo(INavigationParameters parameters)
{
}
}
}
这样 NavigationPage 的事件被路由到 NavigationPageViewModel 并且不再传播到 MasterDetailPage…
- 2 回答
- 0 关注
- 239 浏览
添加回答
举报