2016-08-22 41 views
0

私はXamarin.Forms 2.3.1.114を使用してクロスプラットフォームアプリケーションを構築しています。私はUWPアプリから始めています。今はデスクトップアプリケーションとしてデバッグしています。Xamarin:MasterDetailPageの詳細の戻るボタン

これは、現在のナビゲーション・パスです:

メインメニュー(ContentPage) - >コンテンツ(MasterDetailPage)

MasterDetailPage:

- >マスター(ContentPage)は、ListViewコントロールを経由して示す項目のリストが含まれています

- >詳細(ContentPage)は、単一のリスト項目

Xamarinドキュメントからのデータを表示します以下のようになります。

詳細ページは、MasterDetailPage.IsPresentedプロパティをfalseに設定することでユーザーに提示されます。

https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/

だから私は、マスターページの公共の場でのListViewをした、とMasterDetailPageに次のコードの似を追加しました:

public MyMasterDetailPage() 
{ 
    this.Master.ItemsListView.ItemSelected += MasterListView_ItemSelected; 
} 

private void MasterListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) 
{ 
    if (this.Master.ItemsListView.SelectedItem == null) 
    { 
     return; 
    } 

    this.Detail.BindingContext = this.Master.ItemsListView.SelectedItem; 

    this.IsPresented = false; 
} 

詳細ページには、選択した項目の詳細を示しています、これはうまくいきます。

ただし、戻るボタンがあります。詳細ページにあるとき、戻るボタンはマスターページとは対照的にメインメニューのコンテンツページに戻ります。これは私の目で予想される動作です。この動作を達成するための意図された方法は何ですか?ここで

は、私が試したものです:

コースの概要ページでは、ナビゲーションスタックにプッシュされていないため、この動作があります。 ItemSelectedイベントで詳細ページのインスタンスをプッシュすると、そのParentプロパティが既に設定されているため、例外が発生します。

MasterDetailPageのDetailプロパティを設定するときに、[ナビゲーション]ページで[詳細]ページをラップしようとしましたが、ナビゲーションボタンまたはこれらの行に沿ったものを要求するNavigationPageによって表示される。また、同じ結果を持つContentPageとは対照的に、DetailページをNavigationPageから継承しようとしました。

ここで正しいことを探しているかどうかはわかりませんが、MasterDetailPagesの使用方法に誤解があるようです。どんな助けもありがとうございます。

これはこの現象を示すプロジェクトです。

https://1drv.ms/u/s!At78FKXjEGEohocQQgxaZuCYT2rwMw

、UWPアプリを起動し、「一覧」をクリックし、左の任意の項目をクリックしてください

。戻るボタンをクリックすると、私の問題が表示されます。

+0

こんにちはダニエル、あなたは現在のコードは、あなたがいることをやったのか、戻るボタンが見えるように言いました?デモはあなたの質問を理解するのに役立ちます。詳細ページには、TabbedPage、NavigationPage、およびContentPageインスタンスのみが入力されている必要があります。MasterDetailPageを選択している場合、NavigationPageはシナリオに合わせて使用​​します。 –

+0

こんにちはFranklin、投稿の最後に問題のあるプロジェクトへのリンクを追加しました。私はバックボタンを表示させるために何か特別なことをしなかった、それはナビゲーションスタックがあるために自動でなければならない。 –

答えて

0

「戻る」ボタンをクリックすると、マスターページではなく、メインメニューのコンテンツページに戻ります。これは私の目で予想される動作です。この動作を達成するための意図された方法は何ですか?

はい、あなたの前提は正しいです。これはナビゲーションバックスタックに特定のページがないためです。

Xamarin Master Detailページのデフォルトの動作では、完全な要件を実装できません。

このシナリオで正しい方法は、Navigation.PushAsyncを使用することです。このメソッドは、ページをナビゲーションスタックの上部に非同期的に追加します。

ItemSelectedイベントでDetailページのインスタンスをプッシュすると、そのParentプロパティが既に設定されているため、例外が発生します。

あなたが直接、これは正しくナビゲーションを行います、スタックするContentPageを追加してくださいXAML

<MasterDetailPage.Detail> 
    <pages:LeadDetailPage /> 
    </MasterDetailPage.Detail> 

にMasterDetailPageの詳細プロパティをassingedているように見えます。

使用LeadsMainPage.xmal.csファイルに次のコード:

private void LeadsList_ItemSelected(object sender, SelectedItemChangedEventArgs e) 
{ 
      if (_masterPage.LeadsList.SelectedItem == null) 
      { 
       return; 
      } 

      ContentPage detailpage = new LeadDetailPage(); 
      detailpage.BindingContext= _masterPage.LeadsList.SelectedItem; 
      Navigation.PushAsync(detailpage); 

      this.IsPresented = false; 
} 

スクリーンショット: enter image description here

+0

ありがとう、これは確かに動作します。ただし、このアプローチでは、MasterDetailPageをまったく使用する理由はありません。また、マスターとディテールを切り替えるために左右にスワイプするような動作は、他のプラットフォームに移行するともう動作しません(これはiOSのデフォルトです)。私は、MasterDetailPageが同じページの下にあるすべてのマスターディテールビヘイビアを持っていると仮定していましたが、これはまったく目的ではないように感じます。それでは、私の現在のものではないにしても、MasterDetailPageを使うのは正しいシナリオでしょうか? –

+1

私の経験では、MasterDetailPageの動作は[UWPのハンバーガーメニュー]のようなものです(https://blogs.msdn.microsoft.com/quick_thoughts/2015/06/01/windows-10-splitview-build-your -first-hamburger-menu /)ですが、SplitViewコントロールを使用すると、ハンバーガーメニューは左上のタイトルバーのナビ戻るボタンをサポートします。 Xamarinでは、このシナリオでサポートされていません。 UWPの一般的な方法であるTemplate10は推奨テンプレートです:https://github.com/Windows-XAML/Template10/wiki –

関連する問題