Posted at

Xamarin.Formsで画面遷移元にパラメータを返す

More than 1 year has passed since last update.

Xamarin.Formsで画面遷移元にパラメータを返すのって皆さんどうやってるんでしょうか。

ViewModelからPushAsyncで画面遷移するのは良いとして、遷移先からPopAsyncで戻ってきたときにイベント発生しないし。。

とりあえずこんな方法でやってみたけど正解がわからない。


遷移元ViewModel

CallBack用のメソッドを作ってあげる


HomePageViewModel.cs

public void CallBack(DateTime inDate, string task)

{
// 遷移先から戻ってきたときの処理
}

画面遷移する際に遷移先画面のコンストラクタにCallBack用メソッドを引数で渡す


HomePageViewModel.cs

private void AddTask()

{
Action<DateTime, string> callback = CallBack;

this.navigation.PushAsync(new AddTodo(callback));
}



遷移先ViewModel

コンストラクタでCallBack用メソッドを受け取り、、


AddTodoViewModel.cs

public AddTodoViewModel(INavigation nav, Action<DateTime, string> callback)

{
this.navigation = nav;
this.action = callback;

TodoCreationCommand = new Command(() => TodoCreation());
}


PopAsyncする前にCallBackメソッドを実行します。

CallBackメソッドの引数に遷移元に戻したいパラメータを設定してやればこのパラメータを使って遷移元画面で処理ができます。


AddTodoViewModel.cs


private void TodoCreation ()
{
action(InDate, Todo);

this.navigation.PopAsync();
}