私は、私が書いた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を配置してみましたが、何もしていないようです。
別の記事を読むと、これらのメソッドは「次の」ページにしか影響しないので、前のページに同じメソッドを適用しようとしましたが、まだ成功しませんでした。しかし、実際にはモーダルポップアップとしての前のページとスタック上の唯一のページはありません。
私がここで間違っているかもしれないアイデアはありますか?