return 来自 activity 中托管的片段的结果(在 MvvmCross 中)

return result from fragment hosted in activity (in MvvmCross)

我有片段:

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

此片段由以下人员打开(在独立主机 activity 中):

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

现在我尝试 return 来自 MyFragment 的值

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

但上面只是关闭来自主机 activity 的片段,主机 activity 留在屏幕上。

您有关于如何 return 从 MyFragment 向调用方发送值的建议吗? 顺便提一句。也许上面应该有用,但我在另一个地方破坏了某事?

提前致谢!

我找到了解决方法。
MyFragmentViewModel 调用 await NavigationService.Close(this, "my result") 然后 MyFragmentViewModel 的调用者返回结果 但主持人 activity 停留在屏幕上(覆盖来电者视图)。

作为解决方法,我手动关闭主机 activity:

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();
      };
   }
   ...
}