我正在使用带有Xamarin形式的棱镜。
使用强类型导航时是否可以指定绝对导航?
我知道如何使用uri导航,但更愿意远离神奇的琴弦。
修改
这个问题的措辞可能很差。我想知道在使用视图模型导航时是否可以使用绝对导航(重置导航堆栈)。我已经确认它不可能,也没有导航到导航页面中的页面。
https://github.com/PrismLibrary/Prism/issues/673#issuecomment-229564694
我已经改为使用uri构建器系统使用页面导航,就像接受的答案一样。
答案 0 :(得分:0)
绝对URI是一个字符串。所以你最好的选择是定义一个常量并使用它。
答案 1 :(得分:0)
正如Brian所说,绝对URI是一个字符串。
像他解释的那样定义常数可能是你最好的选择。
对于简单页面导航(不做多次,只是"转到此处"),您可以使用nameof(ClassType)来获取URI版本,或者您可以将nameof()作为一个步骤更进一步一个提供程序,它根据一个类型的字符串生成你的魔术字符串。
例如,
_navigation.Navigate(_navigation.CreateURI(nameof(HomePage), nameof(LoginPage), nameof(HelpPage)));
如果CreateURI是NavigationService上的扩展方法,那么您将获取一个Page / ContentPage类型的参数列表。这最终会阻止您使用魔术字符串(保持重构安全),而无需为每个实例创建单独的常量。
它可能看起来像这样(经过测试和工作):
public static class PrismExtensionMethods {
public static string CreateURI(this INavigationService @this, params string[] pages) {
var result = "";
foreach(var item in pages) {
result += item + "/";
}
return result;
}
}
答案 2 :(得分:0)
我们使用枚举的ToString作为'常量'。枚举包含所有可能的导航选项。注册页面:
_container.RegisterTypeForNavigation<MainPage>(UiExperience.Main.ToString());
导航到页面:
NavigationService.Navigate($"{UiExperience.Main}");
或
NavigationService.Navigate($"{UiExperience.Main}/{UiExperience.DetailsNavigation}/{UiExperience.WorkOrderOverview}"
这就像Jerry Nixon建议here。