Xamarin.FormsでASP.NET CoreなDI(Dependency Injection) (4)
NavigationPageを使ったページ遷移をやってみようと思います.
変更するところはまず,Appクラスのコンストラクタです.
以下のようにNavigationPageをはさみます.
public App(MainPage mainPage) { InitializeComponent(); MainPage = new NavigationPage(mainPage); }
新しくSecondPage
を作って,MainPageから遷移するとしましょう.
そうすると,MainPageからはボタンを押したときにMainPageViewModel経由でPushAsync
メソッドで遷移するという感じでしょうか.
すると以下のようにServiceProviderからインスタンスを取得する?
もしくは,コンストラクタでSecondPageのインスタンスを受け取ってそれを使うとか.
public MainPageViewModel(IDataService dataService, INotificationService notificationService, SecondPage secondPage) { ...省略 NavigateToSecondPageCommand = new Command(_ => { //App.Current.MainPage.Navigation.PushAsync(Startup.ServiceProvider.GetService<SecondPage>()); App.Current.MainPage.Navigation.PushAsync(secondPage); }); }
ページ遷移時のパラメータの受け渡しはどうするんだ?
ShellだとQueryPropertyとしてコードビハインド側で受け取れるから,それをViewModelに詰め直すという感じでいいのかな.
もしくは,グローバルなDictionaryを用意して,そこに入れるか.
ViewModel側でコードビハインドのときと同様にQueryProperty
属性を使って,クエリーパラメータの値をプロパティに格納することができる.