вернуть результат из фрагмента, размещенного в действии (в MvvmCross) - PullRequest
0 голосов
/ 03 августа 2020

У меня есть фрагмент:

[MvxFragmentPresentation(ActivityHostViewModelType = typeof(MyHostActivityViewModel), FragmentContentId = Resource.Id.llContainer)]
[Register("views.MyFragmentView ")]
public class MyFragmentView : MvxFragment<MyFragmentViewModel>
{
...
}

Этот фрагмент открывается (в активности автономного хоста):

var result = await NavigationService.Navigate<MyFragmentViewModel, string, string>("sample input");

Теперь я пытаюсь вернуть значение из MyFragment

class MyFragmentViewModel : MvxViewModel<string, string>
{
   void SomeMethod()
   {
      await NavigationService.Close(this, "my result");
   }
   ...
}

, но выше просто закрывает фрагмент из активности хоста, и активность хоста остается на экране.

У вас есть рекомендации, как вернуть значение из MyFragment вызывающей стороне? Кстати. Может быть, выше должно работать, но я испортил что-то в другом месте?

Заранее спасибо!

1 Ответ

0 голосов
/ 04 августа 2020

Я нашел обходной путь. Когда MyFragmentViewModel вызывает await NavigationService.Close(this, "my result"), вызывающий MyFragmentViewModel получает результат, но активность хоста остается на экране (закрывая представление вызывающего абонента).

В качестве обходного пути я вручную закрываю активность хоста:

class MyFragmentViewModel : MvxViewModel<string, string>
{
   public event Action ReturningResult;

   async void SomeMethod()
   {
      ReturningResult?.Invoke();
      await NavigationService.Close(this, "my result");
   });
   ...
}

[...]
public class MyFragmentView : MvxFragment<MyFragmentViewModel>
{
   public override void OnCreate(Bundle savedInstanceState)
   {
      base.OnCreate(savedInstanceState);
      ViewModel.ReturningResult += delegate
      {
         Activity.Finish();
      };
   }
   ...
}
...