强类型绝对导航
Strongly type absolute navigation
我正在使用带有 Xamarin 表单的棱镜。
是否可以在使用强类型导航时指定绝对导航?
我知道如何使用 uri 导航来做到这一点,但更愿意远离魔法字符串。
编辑:
这个问题可能措辞不当。我想知道在使用视图模型导航时是否可以使用绝对导航(重置导航堆栈)。我已经确认这是不可能的,也没有导航到导航页面中的页面。
https://github.com/PrismLibrary/Prism/issues/673#issuecomment-229564694
从那以后,我改用像接受的答案一样使用 uri 构建器系统的页面导航。
绝对 URI 是一个字符串。所以你最好的选择是定义一个常量并使用它。
正如 Brian 所说,绝对 URI 是一个字符串。
像他解释的那样定义常量可能是你最好的选择。
对于简单的页面导航(不做多个,只是 "Go here"),您可以使用 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;
}
}
我们将枚举的 ToString 用作 'constants'。枚举包含所有可能的导航选项。注册页面:
_container.RegisterTypeForNavigation<MainPage>(UiExperience.Main.ToString());
导航到页面:
NavigationService.Navigate($"{UiExperience.Main}");
或
NavigationService.Navigate($"{UiExperience.Main}/{UiExperience.DetailsNavigation}/{UiExperience.WorkOrderOverview}"
这就像杰瑞·尼克松建议的那样 here。
我正在使用带有 Xamarin 表单的棱镜。
是否可以在使用强类型导航时指定绝对导航?
我知道如何使用 uri 导航来做到这一点,但更愿意远离魔法字符串。
编辑:
这个问题可能措辞不当。我想知道在使用视图模型导航时是否可以使用绝对导航(重置导航堆栈)。我已经确认这是不可能的,也没有导航到导航页面中的页面。
https://github.com/PrismLibrary/Prism/issues/673#issuecomment-229564694
从那以后,我改用像接受的答案一样使用 uri 构建器系统的页面导航。
绝对 URI 是一个字符串。所以你最好的选择是定义一个常量并使用它。
正如 Brian 所说,绝对 URI 是一个字符串。
像他解释的那样定义常量可能是你最好的选择。
对于简单的页面导航(不做多个,只是 "Go here"),您可以使用 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;
}
}
我们将枚举的 ToString 用作 'constants'。枚举包含所有可能的导航选项。注册页面:
_container.RegisterTypeForNavigation<MainPage>(UiExperience.Main.ToString());
导航到页面:
NavigationService.Navigate($"{UiExperience.Main}");
或
NavigationService.Navigate($"{UiExperience.Main}/{UiExperience.DetailsNavigation}/{UiExperience.WorkOrderOverview}"
这就像杰瑞·尼克松建议的那样 here。