2

我在我的WPF应用程序中使用MVVMCross,我想在 GUI 中提供一个Close(或Exit)按钮来关闭整个应用程序。有没有使用MVVMCross功能的简单方法来做到这一点?

我尝试了以下方法MainViewModel

public class MainViewModel : MvxViewModel
{
    private MvxCommand _closeCommand;
    public MvxCommand CloseCommand {
        get { 
            return _closeCommand ?? (_closeCommand = new MvxCommand(DoClose));
        }
    }

    public void DoClose() {
        Close(this);
    }
}

不幸的是,无济于事。DoClose当我按下已绑定到 的按钮时,该方法会被调用CloseCommand,但视图模型(和相应的视图)无法关闭,即使 WPFApp StartupUri设置为MainView.

4

1 回答 1

5

许多 MvvmCross 平台不支持应用程序自行关闭——这在 iOS、WindowsPhone、Android、WindowsPhone 等中的行为不受欢迎——那里的公共 API 不支持它——所以这不是一个常见的跨平台请求。

但是,如果您想为那些支持它的平台实现此功能,那么我认为最好的放置位置可能是在演示器中或在自定义 UI 注入服务中。


要将其放入自定义演示者中,只需:

  • 创建一个自定义演示者类(基于MvxWpfViewPresenter.cs
  • CreatePresenter在您的 Setup.cs中的方法的覆盖中返回此类的实例
  • 覆盖ChangePresentation自定义演示者中的方法 - 此方法可能使用发送的“众所周知的” MvxClosePresentationHint.cs,或者它可以使用您在 ViewModel 中Close定义和发送的新自定义演示提示。ChangePresentation(MvxPresentationHint hint)

要将此功能改为某些自定义 UI 服务,请参阅http://mvvmcross.wordpress.com/中的 N=31


如果您正在查看此关闭区域,那么您可能还需要考虑在应用程序关闭时要采取哪些步骤(通过用户或操作系统操作)。MvvmCross 确实公开了框架中常见的“生命周期监视器”钩子的开始,但实际上这些在当前是非常基础的——所以你可能会发现你需要在这里构建自己的公共层。

于 2013-07-22T10:56:57.870 回答