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

C# 如何在MVVMCross WPF应用程序中实现关闭按钮?,c#,wpf,mvvmcross,C#,Wpf,Mvvmcross,我在我的WPF应用程序中使用MVVMCross,我想在GUI中提供一个关闭(或退出)按钮来关闭整个应用程序。使用MVVMCross功能是否有一种简单的方法可以做到这一点 我已在我的MainViewModel上尝试了以下方法: public class MainViewModel : MvxViewModel { private MvxCommand _closeCommand; public MvxCommand CloseCommand { get {

我在我的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平台也不支持应用程序自动关闭-这是iOS、WindowsPhone、安卓、WindowsPhone中的一种令人不快的行为,etc-那里的公共API不支持它-因此这不是常见的跨平台请求

但是,如果您想为那些确实支持该功能的平台实现该功能,那么我认为最好将其放在presenter或自定义UI注入服务中


要将其放入自定义演示者中,只需执行以下操作:

  • 创建自定义演示者类(基于)
  • 在Setup.cs中重写
    CreatePresenter
    方法时返回此类的实例
  • 覆盖自定义演示者中的
    changepression
    方法-此方法可能使用“已知”方法,这是
    Close
    发送的,也可能使用您在ViewModel中通过
    changepression(mvxpressionhint)
    定义和发送的新自定义演示提示
要将此功能放在某些自定义UI服务中,请参见中的N=31



如果您正在查看此关机区域,那么您可能还想考虑在应用程序关闭时采取什么步骤(通过用户或操作系统动作)。MvvmCross确实公开了框架中常见的“lifetime monitor”钩子的开始,但实际上这些钩子目前是非常基本的,因此您可能会发现您需要在这里构建自己的公共层。

您是否尝试过Application.Current.Shutdown()?谢谢,尼特斯。但是,理想情况下,我希望在可移植视图模型中管理应用程序关闭<代码>应用程序.Current.Shutdown在PCL“核心”项目中不可用。好的,那么我也想得到这个问题的答案。非常感谢您的出色回答(以及MVVMCross本身)@Stuart.to@Stuart和其他感兴趣的各方:不管它值多少,请查找具有基本
Close
支持的自定义WPF view presenter类的示例。