実現したいこと
MauiShell の 画面変遷をキャンセルしたい
前提
VisualStudioでMauiを使い、クロスプラットフォームの作成をしております
MVVM方式で作成しております
各クラスはDIコンテナで登録しています
Shellを使いPage管理をしています
ShellContentsPageは複数あります
他のPageから移動する際に警告用の画面を作成して、Cancelなら変遷しないようにしたい
発生している問題・エラーメッセージ
下記にネットのコードを参考に作成した デバッグでe.Cancelまで処理が進んだことは確認したが、 画面変遷がキャンセルされず、選択した画面に移動してしまう
該当のソースコード
C#
1public partial class AppShell : Shell 2{ 3 public AppShell(AppShellPageModel appShellPage) 4 { 5 InitializeComponent(); 6 BindingContext = appShellPage; 7 this.Navigating += Shell_NavigatingAsync; 8 } 9 10 private async void Shell_NavigatingAsync(object sender, ShellNavigatingEventArgs e) 11 { 12 bool result = await Utility.ShowConfirmationDialog("確認", "移動しますか?"); 13 if (!result) 14 { 15 e.Cancel(); 16 } 17 } 18}
未確認なのでこちらに書きますが、GetDeferral & Completeしないといけないんじゃないですかね?
[.NET MAUI Shell ナビゲーション - .NET MAUI | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/maui/fundamentals/shell/navigation#navigation-deferral)
コメントありがとうございます。
提示していただたい記述は見ていたのですが、よく理解していませんでした
再度、内容を理解して、記述したところ思ったPage変遷の実装ができました
ありがとうございます
そうですかよかったです^^
お手数ですがうまくいったコードを回答しベストアンサーにして、質問を「解決済」にしてください。
[ヘルプ|質問をした後に自己解決してしまった](https://teratail.com/help#resolve-myself)
コメントありがとうございます。
ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか?
特にポイントにはこだわっていないので、RC46さんのほうで実際にうまくいったコードを回答いただけたらと思います。
蛇足ながらawaitを挟まない場合は、GetDeferralは必要ありません(提示リンク直前のコードもしていません)
非同期にすると一旦メソッドから抜ける形になるため、GetDeferral & Completeで知らせる必要があります。
MAUIではこういうパターンは、ほかでも出てきた気がします(非同期が多くなった苦肉の策っぽいですが^^;
ありがとうございます
内製プログラマーなので稚拙なコードですが掲載しました
ありがとうございます。
その回答に自分で「ベストアンサー」を付けてください^^