2016-06-20 47 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