2016-06-20 4 views
0

私はXamarinフォームでプリズムを使用しています。厳密に絶対的なナビゲーションを入力してください

厳密に型指定されたナビゲーションを使用する場合、絶対ナビゲーションを指定することはできますか?

私はURIナビゲーションでそれを行う方法を知っていますが、魔法の弦から遠ざかることを好むでしょう。

EDIT:

この質問はおそらく悪い言葉で表現されました。私は、ビューモデルナビゲーションを使用している間に絶対ナビゲーション(ナビゲーションスタックをリセットする)を使用できるかどうかを知りたがっています。私はそれが可能ではないことを確認しており、どちらもナビゲーションページ内のページにナビゲートしていません。

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

受け入れ答えのようなURIビルダー系を使用してページナビゲーションを使用して変更するので、私が持っています。

+0

ViewModelでFreshMvvmを見て、ViewModelのナビゲーションを見てください。別の良いオプションはMvvmCrossです。 –

+0

アプリケーションは任意のドメインの下でホストできるので、絶対URLには魔法の文字列が必要です。 – Rob

+0

こんにちは、申し訳ありませんが、私はXamarinフォームでプリズムを使用することを具体的に意味することを明確にすべきでした。 – Troto

答えて

0

Brianによると、絶対URIは文字列です。

彼が説明したような定数を定義するのが最善の策かもしれません。

nameof(ClassType)を使用してURIバージョンを取得することもできますし、nameof()メソッドを使用して生成するプロバイダを作成することもできますあなたの魔法のひもはクラスターの配列に基づいています。例えば

、CreateURIあなたはそれがタイプPage/ContentPageののparamsのリストを取り込み作るのNavigationServiceの拡張メソッドである

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

。これは最終的に、インスタンスごとに別々の定数を作る必要なしに、マジック文字列を使用することを防ぎます(リファクタリングを安全に保ちます)。

それは、この(テストおよび作品)のようになります:

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メソッドを使用しています。 enumにはすべての可能なナビゲーションオプションが含まれています。ページの登録:

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

のページへの移動:

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

または

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

これは、ジェリー・ニクソンがhereことを示唆しているだけのようなものです。

関連する問題