2016-12-13 12 views
0

私は、私が書いたMVVM Xamarin Formsフレームワークを持っており、私はモーダルダイアログをポップアップすると、ソフトナビゲーションの戻るボタン(この質問の目的のためにiOSで)のBackButtonTextをオーバーライドする方法を確立しようとしています。Xamarinフォームでモーダルダイアログを表示するときに、どのように 'BackButtonText'を表示および設定するのですか?

マイナビサービスはそうのようなIoCコンテナを経て順番にNavigationPageになってますカスタムモーダルページコントローラのビューモデルを作成します。

public async Task PushModalAsync<T>() where T : INavigationPageModel 
    { 
     var navigationmodel = _viewModelFactory.CreateModel<ModalPageControllerViewModel<T>>(); 
     var page = _viewFactory.CreatePage(navigationmodel); 
     await Navigation.PushModalAsync(page); 
    } 

結果のページには、クラス構造で終わる:

public class NavigationControllerView : NavigationPage, IView 

これにより、私自身のViewModelのBindingContextを設定できます。その後、私は縛り付けて、私のために重い吊り上げの残りの部分をすることを期待しています。このナビゲーションコントローラビューでバインディングコンテキストを設定するナビゲーションスタックに、最初のページ(この場合はモーダルダイアログ)をプッシュします。私が期待するよう

var page = _viewFactory.CreatePage(_viewModel.CurrentPage); 
PushAsync(page); 

ページは、その後正しく表示上の私の表示ナビゲーションバー、およびツールバー項目とポップアップページとして私のデバイス上に表示されます。私が想像していたように、すべてのバインディングが機能しているように見え、私はViewModelからページを閉じることができます。これまでのすべての良い。

モーダルダイアログがモーダルスタック上の唯一のページであり、それがおそらくモーダルなので、このモーダルページには「戻る」ボタンは表示されないため、ここで推測します。私がしたいのは、モーダルポップアップに戻るボタンを表示し、そのテキストを上書きして「キャンセル」を表示することです。これは、iOSの[新しいメールを作成]ポップアップページのアイデアと同じに見えるので、私はそれを解除できます。それを示す

私は読んだことがあるかなりの数の記事がようでなければなりませんコードを置く「など、単純な」

NavigationPage.SetBackButtonText(page, "Some title") 

そしておそらく私を正確に伝えるためにライン

NavigationPage.SetHasBackButton(page, this) 

しかし怠慢が含まこれが起こる必要がある場所。いくつかは、ページのコンストラクタでこれが起こるはずだと示唆していますが、どのページですか?それはNavigationPage自体のページです(私はそれがホストされたモーダルページのラッパーであると理解しています)。

注:ナビゲーションバーとツールバーアイテムを引き続き表示するには、ナビゲーションページ内にモーダルページをホストしました。

私はNavigationPage.SetBackButtonTextとNavigationPage.SetHasBackButtonを配置してみましたが、何もしていないようです。

別の記事を読むと、これらのメソッドは「次の」ページにしか影響しないので、前のページに同じメソッドを適用しようとしましたが、まだ成功しませんでした。しかし、実際にはモーダルポップアップとしての前のページとスタック上の唯一のページはありません。

私がここで間違っているかもしれないアイデアはありますか?

答えて

0

ここでは、モーダルナビゲーションページに戻るボタンを表示しようとしていますが、そのナビゲーションページのスタックには何も戻りません。

他のページを表示する前に、モーダルナビゲーションページのスタックに「ダミー」ページを置くと、戻るボタンが表示され、「キャンセル」を表示するようにテキストが変更される可能性があります。この方法では、バックナビゲーションを処理するために余分な配線が必要になり、ダミーページに戻って「キャンセル」するときにモーダルナビゲーションをモーダルスタックからポップする可能性があります。

免責事項:私はこのアプローチを試していないし、他の問題が発生するかどうかは考えていません。

関連する問題