如何在MVVMCross WPF应用程序中实现关闭按钮?

时间:2013-07-22 09:26:06

标签: c# wpf mvvmcross

我在 WPF 应用程序中使用 MVVMCross ,我想提供关闭(或退出 GUI中的按钮可以关闭整个应用程序。有没有一种直接的方法可以使用 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方法,但即使WPF App {视图模型(和相应的视图)也无法关闭{1}}设置为StartupUri

1 个答案:

答案 0 :(得分:4)

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

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


要将其置于自定义演示者中,只需:

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

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

中的N = 31

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

相关问题