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

本文关键字:实现 关闭按钮 应用程序 WPF MVVMCross | 更新日期: 2023-09-27 18:24:16

我在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);
    }
}

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

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

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

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


把它放在一个自定义的演示器中,简单地说:

  • 创建自定义演示程序类(基于MvxWpfViewPresenter:cs)
  • 在Setup.cs中的CreatePresenter方法的重写中返回此类的实例
  • 覆盖自定义演示程序中的ChangePresentation方法-此方法可能使用Close发送的"众所周知"MvxClosePresentationInt.cs,也可能使用您在ViewModel中定义并通过ChangePresentation(MvxPresentationHint hint)发送的新自定义演示提示

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


如果您正在查看这个关闭区域,那么您可能还需要考虑在应用程序关闭时(通过用户或操作系统操作)要采取哪些步骤。MvvvmCross确实公开了框架内常见的"终身监控"挂钩的开始,但实际上在实践中,这些挂钩目前非常基本,所以你可能会发现你需要在这里构建自己的公共层。