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();
};
}
...
}
我有片段:
[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();
};
}
...
}