3

UWP でサブページ ナビゲーションを実装する方法に問題があります。ページは、ナビゲーションで使用できる RootFrame にあります。しかし、私はこのようなものを使いたい:

    <Page>
<Grid>
 <Frame x:Name="MyFrame"/>
</Grid>
</Page>

私が欲しいのは、ViewModel で MyFrame コントロールの Navigate メソッドを使用することです。コード ビハインドからメソッドを呼び出すことはできますが、MVVM を使用してアプリを開発しています。Template10 がサブフレームで機能するかどうかはわかりません。

アドバイスをいただければ幸いです。

編集: 詳細: ページ内にピボット コントロールがあります。ピボットには 2 つのタブ (ピボットアイテム) があります。ピボットアイテムのコンテンツはナビゲート可能である必要があります。つまり、ピボット項目 1 です。フレームが 1 つ必要で、それをピボット項目のナビゲーションに使用する必要があります。私の問題は、ViewModel からピボット項目のフレームを使用する方法または呼び出す方法です。特に、Navigate メソッドを呼び出す必要があります。現在、Template10 のナビゲーション サービスを使用しており、rootframe で動作しています。わかりませんが、他のサブフレームとしましょう。

4

4 に答える 4

2

ナビゲーションの変更をトリガーする方法がわからないので、ボタンのクリックから開始すると仮定します。また、ボタンのCommandプロパティがビューモデルの に既にバインドされていると仮定していますICommand(同じ概念をさまざまな種類のビューに適用できます)。

ここで行う必要があるのは、ICommand実装でカスタムNavigationServiceを呼び出してコンテンツ スイッチを実行することだけです。このNavigationServiceクラスは、ウィンドウ グローバル フレームへの単純なプロキシにすぎません。その主なナビゲーション方法は、次のように単純です。

    public void Switch()
    {
        var rootFrame = Window.Current.Content as Frame;

        if ((rootFrame.Content as ParentPage) != null)
        {
            rootFrame.Navigate(typeof(ChildPage));   
        }
    }
于 2016-03-10T21:34:27.010 に答える
2

これを Template10 でタグ付けしましたが、UWP 全体のより一般的な質問のようです。このアプローチに固有の複雑さ、特に停止と再開に関連するすべてを考慮したかどうか疑問に思います。フレームごとに、ナビゲーション状態を保存して復元する必要がありますが、ネストされたフレームがある場合、これは簡単ではありません。グローバル ナビゲーションがどのように機能するかについても検討しましたか?

テンプレート 10 は複数の NavigationServices の概念をサポートしているため、複数のフレームを作成できますが、それらを作成できるのはユーザーの視点からのみです。Template10 は、そのようなフレームが互いにどのように関連するかを本質的に理解していないため、次のような場合に自動逆伝播を実行できません。

FrameA[Main->Page1->Page1:Pivot1.FrameB[View1->View2->View3]]

ここには、FrameA と FrameB の 2 つのフレームがあります。FrameA は Main から Page1 に移動しました。Page1 には PivotItem1 で FrameB をホストするピボットがあり、FrameB は View1 から View 2 および View2 から View 3 に移動しています。

グローバル ナビゲーション (シェル バックなど) は自動的に FrameA に接続されるため、そのアクションをインターセプトしてから、FrameB の独自のナビゲーション アクティビティを処理する必要があります。

BackButtonBehaviorを見て、グローバル バックをインターセプトし、独自のアクションを配置する方法を確認してください。

于 2016-03-14T20:44:36.210 に答える
1

そのようなことができるかどうかはわかりません.1つの可能な回避策は、ビューモデルからビューのコードビハインドにメッセージを送信するメッセンジャーを使用することです..私はこのソリューションのファンではありません.ページのコードビハインドを使用する前に言った..

于 2016-03-11T13:24:45.133 に答える