#何がしたいのか
- TabbedPageのタブをタップした際に、何か処理をしたい。
- TabbedPage内にNavigationPageがあり、それをRootに遷移したい。
- 選択済のタブ押しても、Rootに遷移したい。
#どう実装したのか
まず、Forms側だとChangeイベントは取れたが選択のイベントがなかったので素直にCustomRendererを作成。
CustomTabbedRenderer.cs
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "Renderer")
{
navigationBar = (GetChildAt(0) as Android.Widget.RelativeLayout).GetChildAt(1) as BottomNavigationView;
navigationBar.NavigationItemSelected += ItemSelected;
navigationPage = ((NavigationPage)(sender as TabbedPage).Children[0]);
}
}
async void ItemSelected(object sender, BottomNavigationView.NavigationItemSelectedEventArgs e)
{
this.OnNavigationItemSelected(e.Item);
await navigationPage.Navigation.PopToRootAsync();
MessagingCenter.Send(navigationPage, "doit!");
}
Rendererの際に、NavigationBarのItemSelectedイベント設定と
NavigationPageを取得。
選択された際に、NavigationPageをRootに戻し
Messengerで強引に、処理を発火。
#おわり
なんかもうちょい綺麗に出来る気がするんですが、同じような記事が全くなくて
どうしようもありませんでした・・・。
知見溢れる方、ご指導頂けると助かります!