【发布时间】:2013-04-10 07:12:43
【问题描述】:
在 MvvmCross v3,CustomerManagement 示例中,方法 void RequestClose(IMvxViewModel viewModel) 关闭顶部 View。您如何关闭 View 的 ViewModel 而不是?
【问题讨论】:
在 MvvmCross v3,CustomerManagement 示例中,方法 void RequestClose(IMvxViewModel viewModel) 关闭顶部 View。您如何关闭 View 的 ViewModel 而不是?
【问题讨论】:
我不会使用那个 ViewModelCloser 方法 - 尽管如果你愿意,它可以被扩展。
MvvmCross v3 删除了之前的 CloseViewModel 方法 - 因为它并没有真正适用于所有平台和所有演示样式 - 所有导航控制器、拆分视图、选项卡、弹出窗口、弹出窗口、对话框等。
为了替换它,v3 引入了一个新的 ViewModel 调用:
protected bool ChangePresentation(MvxPresentationHint hint)
这在 UI 中与 IMvxViewPresenter 方法匹配:
void ChangePresentation(MvxPresentationHint hint);
要使用它,您需要:
创建一个新的 Hint 类 - 例如public class CustomPresentationHint : MvxPresentationHint { /* ... */ }
在每个 UI 项目中,提供一个自定义演示者(通常通过覆盖 Setup.cs 类中的 CreateViewPresenter()) - 并在该自定义演示者中处理 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
}
}
在您的视图模型中,您可以随时发送CustomPresentationHint。
我意识到这比 vNext 所需的“工作量更大”,但希望这是一种更灵活、更强大的方法。
【讨论】:
public IMvxViewModel ViewModelToClose {get;set; 属性添加到您的 CusomPresentationHint