2016-06-20 44 views
0

我使用Xamarin格式的棱镜。强类型绝对导航

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

我知道如何使用uri导航,但宁愿远离魔术字符串。

编辑:

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

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

因为我已经改为使用URI生成器系统,如接受的答案使用页面导航。

+0

看看FreshMvvm与ViewModel到ViewModel导航。另一个不错的选择是MvvmCross。 –

+0

根据定义,绝对URL需要一个魔术字符串 - 因为您的应用程序可以托管在任何域中。 – Rob

+0

嗨,对不起,我应该澄清,我的意思是专门用Xamarin形式使用棱镜。 – Troto

回答

0

正如Brian所说,绝对URI是一个字符串。

像他解释的定义常数可能是你最好的选择。你可以使用nameof(ClassType)来获取URI版本,或者你可以使用nameof()这个步骤来创建一个提供者来生成一个简单的页面导航(不是多重的,你的魔术字符串基于一个数组类型。

例如,

_navigation.Navigate(_navigation.CreateURI(nameof(HomePage), nameof(LoginPage), nameof(HelpPage))); 

凡CreateURI是一个的NavigationService扩展方法你做这需要在类型页/ ContentPage的则params的列表。这最终会阻止你使用魔术字符串(保持重构安全),而不需要为每个实例创建一个单独的常量。

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; 
    } 
} 
+0

非常感谢,我曾想过要这样做。作为后续,你如何使用强类型导航的导航页面? – Troto

+0

对不起,当你说强类型时,你的意思是绝对导航与相对导航相比?如果你的意思是绝对的话,_navigationService.NavigateAsync(新的Uri(“http://www.brianlagunas.com/MainPage”,UriKind.Absolute);你是这么做的。如果你的意思是我不理解的其他东西,请解释一下,我对强类型导航会有什么想法 – Carson

+0

另外,我想到的绝对例子来自于这个链接https://github.com/PrismLibrary/Prism/blob/master/Documentation/ Xamarin.Forms/3-NavigationService.md – Carson

0

绝对URI是一个字符串。所以你最好的选择是定义一个常量并使用它。

0

我们使用的是枚举为“常量”的的ToString:

它可能看起来像这样(测试和工程)。该枚举包含所有可能的导航选项。注册页面:

_container.RegisterTypeForNavigation<MainPage>(UiExperience.Main.ToString());

导航到该页面:

NavigationService.Navigate($"{UiExperience.Main}");

NavigationService.Navigate($"{UiExperience.Main}/{UiExperience.DetailsNavigation}/{UiExperience.WorkOrderOverview}" 

这就像杰里尼克松提出here