强类型绝对导航

时间:2016-06-20 09:03:31

标签: c# xamarin.forms prism

我正在使用带有Xamarin形式的棱镜。

使用强类型导航时是否可以指定绝对导航?

我知道如何使用uri导航,但更愿意远离神奇的琴弦。

修改

这个问题的措辞可能很差。我想知道在使用视图模型导航时是否可以使用绝对导航(重置导航堆栈)。我已经确认它不可能,也没有导航到导航页面中的页面。

https://github.com/PrismLibrary/Prism/issues/673#issuecomment-229564694

我已经改为使用uri构建器系统使用页面导航,就像接受的答案一样。

3 个答案:

答案 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