如何使用ViewModelCloser关闭ViewModel的视图?

时间:2013-04-10 07:12:44

标签: c# xamarin mvvmcross

在MvvmCross v3,CustomerManagement示例中,方法void RequestClose(IMvxViewModel viewModel)关闭了顶部View。您如何关闭View的{​​{1}}呢?

1 个答案:

答案 0 :(得分:4)

我不会使用ViewModelCloser方法 - 尽管可以扩展它。

MvvmCross v3删除了之前的CloseViewModel方法 - 因为它并非适用于所有平台和所有演示样式 - 跨所有导航控制器,拆分视图,制表符,弹出按钮,弹出窗口,对话框等。< / p>

要替换它,v3引入了一个新的ViewModel调用:

    protected bool ChangePresentation(MvxPresentationHint hint)

这在UI中与IMvxViewPresenter方法匹配:

    void ChangePresentation(MvxPresentationHint hint);

要使用此功能,您需要:

  1. 创建一个新的Hint类 - 例如public class CustomPresentationHint : MvxPresentationHint { /* ... */ }

  2. 在每个UI项目中,提供一个自定义演示者(通常通过覆盖CreateViewPresenter()类中的Setup.cs) - 并在该自定义演示者处理ChangePresentationHint调用:

          public void ChangePresentation(MvxPresentationHint hint)
          {
              if (hint is CustomPresentationHint)
              {
                   // your custom actions here
                   // - which may involve interacting with the RootFrame, with a NavigationController, with the AndroidFragment manager, etc
              }
          }
    
  3. 在您的视图模型中,您可以根据需要发送CustomPresentationHint

  4. 我意识到这比vNext要求的“更多工作”,但希望它是一种更灵活,更强大的方法。